2014年9月7日日曜日

Maxscript その3 「変数 代入」

詳しくは
「変数>変数代入」もしくは
「名前、リテラル定数、および式>単純式>数値演算式」の項を参照

変数名 =  計算式
変数名 += 計算式
変数名 -= 計算式
変数名 *= 計算式
変数名 /= 計算式

プログラムやスクリプトでは好きな文字列に値を代入して使う事が出来る


(癖で符号の前後にスペース空けてありますが、見やすくするためです。
x=1とかでも問題ないです。逆に x         =             1でも問題ないです。)

値を代入していない変数を使って計算をするとエラーを返す(下の場合はd)


右辺が先に計算され、その結果が変数に代入されるので、

としても、問題なく計算される。方程式を解いてる訳ではない。

同じ値を代入したい際は以下のようにすることも出来る


a = a+1 のような計算は以下のように記述することも出来る。

maxsciprtでは変数名に大文字、小文字の区別はない


変数名は基本的には好きな文字列を使える。


文字数制限とかあるのでしょうか・・・・?

絶対にやって欲しくはないし、知らないで欲しい事でもあるけど、2バイト文字(全角)も使えてしまう。ある意味凄いけど・・・。だけど、変数名に2バイト文字は絶対に使うな。これは前振りではない。大事な事なのでもう一度。これは前振りではない。

変数名の付け方にルールはないが、中身や役割が分かりやす名前が使われる事が多いようだ。しかし、予約済みグローバル変数など、3ds maxで既に使用されている文字列や特別な記号等は基本的には使用する事が出来ない。

詳しくは「予約済みキーワード、記号、区切り記号、および変数」を参照


僕は女性の胸が大変好きなのですが、piという変数名を使おうとすると・・・。

「あ、それ見るだけだから。触らないで」って怒られる。
piはπを表すために既に使われてしまっている。


eカップ大好きです!

「eはこの世の神秘だから見つめるだけよ。決してティッシュとかではないわ」(ネイピア数参照)


数字から始まる変数名もダメ。
 (英語版起動しているのに何故日本語の警告?)

今度は使えた。しかし、「renderwidth」はシステムグローバル変数として使われており、この変数に値を渡すとレンダリングサイズが変わってしまったり・・・・。

この辺りは、スクリプトエディターで文字列を入力する(最後スペースで1つ空白あける)と色が変わって表示されるのでそれを参考にするのも。
------------
undefined値について

言語によっては変数を使用する前に

int x;
float y;

などして、使用する変数名と型を最初に定義する必要があるようだ。(c++、mel等)
変数の宣言、定義、初期化等。
また、変数に宣言した型以外の値を代入出来ない場合もあるようだ。
int x; とした場合、このxには整数しか代入出来ない。みたいな。

maxscript やpythonでは変数を事前に定義しなくても好きな時に使う事が出来る。
どうやら、変数に値を代入する際に、変数の宣言、定義、初期化などを自動で行ってくれているようだ。(動的変数と呼ばれる奴でしょうか?)maxscriptにおいては変数を呼び出す際にも初期化が行われる場合があるようだ。

この事を認識しておく事は重要だと思う。場合によっては変数の初期化のような事をしないと上手く処理できなかったりエラーの原因となる事がある。

同じ変数に異なる型を続けて代入してみる。変数の型が変化している事が分かる。

なので・・・まだ、値を代入していない、定義されていないdを使って計算をするとエラー。

dの中身を調べてみる。d と入力して ENTER。
maxscriptではまだ一度も使われていない変数=何も定義されていない変数を呼び出すとundefined という値を返す。undefinedが何者か調べてみるとUndefinedClassとなっている。undefined値。(値>特殊データ値)

なのでさっきのc+dの演算エラーは

c+d = integer値+undefined値

の型の違いによる計算エラーということになるのかな?

スクリプトエラーあるある。未定義の変数を使う。(打ち間違え等による初歩的なスペルミスも含む)


なので、maxscriptでは未定義だから使えないのではなく、未定義の変数はundefined値を返す。さっきのエラーは値の相性による演算エラーだと思うので


と、演算の種類によってはエラーは出さない。

maxscriptでは、変数は値だけではなく色んなものを代入して使用出来る。
値、オブジェクト、クラス、ユーザーインターフェース等。その際に変数の中身がどうなっているのかは出来るだけ意識したい。いや、それを考えずにはコードが書けないか。
-------------
変数を代入する際に変数の定義がされるのは似てるけど、
pythonでは未定義の変数を呼び出そうとするとエラーになるので
この辺りの仕様は少し違うかも。
yamagishiが定義されていないとは失礼な


PythonではNone型が近いですかね?ですが、事前に代入して変数の初期化を行う必要があるようです。

山岸は居ない・・・・。

0 件のコメント:

コメントを投稿