2005/8/4

標準化の向こうに潜む可能性  VRMスクリプト禅問答
【怎麼生】
VRM侍のサンプルコードを見ると、変数名の頭文字がVarの場合とStdVarの場合があったり、メソッドの頭文字もMtdの場合とStdMtdの場合があったりしますが、これは何を意図しているんですか。単なる打ち間違えですか。

【説破】 4.0.1.2
Stdが付くものと付かないものの間には、少なくとも私の中では明確な区別があります。キーワードは「標準化」であり、StdはStandardの意です。

狙いは2つあります。

小さい方の狙いは、VRM4スクリプトの書き方のVRM侍流お作法を流行らそう、というつまらないものです。
そんなことをして何の意味があるかと言いますと、もし、私の思惑通りにこのお作法が流行ったとすると、少なくとも私は私以外の方が書いたスクリプトが「何を意図しているのか」を誰よりも早く読みこなすことが出来て便利だからです。いや、これはやや冗談です。
本当の狙いは、ネットVRMユーザーの書くVRM4スクリプトがまったく同一のルールには沿わないにしても、ある程度似たような傾向に収束すれば、他人の作ったレイアウトに機能を追加したり、あるいは自分の作ったレイアウトと連結したり、といったことが容易に出来るんじゃないか、と思うからです。

大きいほうの狙いは、I.MAGiCさんに私が「Std」を付けて示している変数(プロパティ)やメソッドをいっそのこと「命令」として組み込んでもらえないか、という思いがあるからです。私が提示する機能が、本当に一般的に役に立つものであるならば、それをイチイチ長ったらしいスクリプトをコピペして使うなどというのは阿呆な話であって、VRM4の正式命令にしてしまえばいいのです。
たとえば「オブジェクト指向なスクリプトのサンプル」の回で示したサンプルコードに登場するグローバル変数StdVarTypeNoは、要するに「編成オブジェクトは自身の列車種別を示すプロパティを持つべきである」という発想に基づいています。この命題の構造は「編成オブジェクトは自身の最高速度を示すプロパティを持つべきである」とまったく同じです。後者がSet/GetTopSpeedで処理可能なのであれば、変数をVarしてsetしてmovするなどという面倒はやめて、Set/GetTrainType {オブジェクト参照} {変数}という命令にしてしまえばよろしい。
同じように「編成を任意の速度で走らせたい」の回で示したメソッドMtdChangeSpeed(これはまだ改良の余地があるのでStdを付けていませんが)も、SetTrainSpeed {変数(Km/h)} {モード(加減速のポリシーを決める定数)}みたいな命令にしてしまえばよろしい。
実のところ、これこそが私が「直値」を可能な限りメソッド内から追い出そうとしている最大の理由でもあります。直値を含むメソッドには汎用性がありません。すなわち、汎用命令化不能なロジックということになります。直値を一切持たず、外部的に設定されたパラメータのみに準拠して動作するロジックは、利用価値が高いのであれば命令化した方がより多くの人がその恩恵に浴せますし、第2号で実装予定のスクリプトウィザードからも利用しやすくなるはずです。
さらに言うならば、いっそのことスクリプト命令として扱うこと自体をやめて、部品の標準機能(GUIからコントロール可能な)にしてしまえば、スクリプトに馴染めない人にもその機能が利用できますよね。
なお、私自身は自分の提起していることが妥当だとか必須だとかはまったく思っていません。私は単にこういうことをコネコネ考えるのが好きなんです。なので「アイツの言ってることにフォローを入れないと怒り出すんじゃないか」といった配慮はご無用に願います。>I.MAGiC様
仮にVRMにフィードバックされずとも、思考プロセスそのものがどこかで誰かの何かの役に立つことがあるかも知れないし、ないかも知れないし。

蛇足ながら念のため。
私が紹介するようなスクリプトコーディング手法を取らない人(目的に特化したメソッドや直値の分散配置)を非難する意図は、本連載を通じて一切ありません、本当です。そのへん、誤解のないように。そういう神学論争は時間の無駄なので。

注)本連載で示すVRM4スクリプトや物の考え方をあなたが採用した結果生じる全ての事象については、その責を負い兼ねます。私の書いたものを読むに際しては、常に「コイツは狂人で、でも一部は役に立つことも言っているかも知れない」という程度の心構えで臨んでください。
0

コメントを書く

この記事にはコメントを投稿できません




teacup.ブログ “AutoPage”
AutoPage最新お知らせ