2014年9月2日火曜日

Maxscript その1 「値、データ型」

スクリプトの基本的な所をもう一度見直してみようという試み。プログラムやスクリプトの基礎概念をしっかり理解していない僕が記事にしてよい内容ではないのですが・・・。何かの足しになれば思いちまちまやっていこうかなと。間違っている所などありましたら指摘して頂けると幸いです。

スクリプトでは値を扱う際にその値の「型」が何であるかを意識する事が多い。
値と型は多くのプログラムやスクリプトで最少の単位と言ってもよい部分で、プログラム言語の説明はだいたいここの説明から入る。

MaxscriptやPython等のスクリプトは型をあまり意識せずに値を扱う事が出来るが、便利な一方で予期せぬ問題の原因となったり、エラーの原因になったりなど。

スクリプトリスナーを起動。


下の白い欄で簡単な計算をしてみる。

3/2と入力してテンキーの方のエンターを押す。(テンキーでないと改行)
「3÷2」を実行
1
と青い文字が表示される。
次に

3/2.0 と入力してテンキーのエンターを押す。
1.5
と青い文字が表示される。

最初の実行結果と答えが異なる。



classof 2 と入力してエンター。
Integer
と表示される。
classof 2.0 と入力してエンター。
float
と表示される。



2と入力するとMaxscriptは自動的にinteger(整数)として値を扱っているようだ。
2.0と入力するとfloat(実数)。

Maxscriptでは
Integer型/Integer型 = Integer型
Integer型/Float型 = Float型
Float型/Integer型 = Float型

代表的な型は
・Integer 整数
・Float 実数
・String 文字列

などがある。
Stringは文字を扱う際に用いる。
"Yamagishi" や"2"など、ダブルクォートで囲む。


String型とInteger型の足し算は失敗する。スクリプトのエラーの多くの理由の1つがこの型の違いによるエラー。

String型同志の足し算は結合。


異なる型への変換(キャスト)は as を使用。

1 as float を実行すると
1.0

1 as string を実行すると
"1"

"1"  as integer を実行すると
1

"yamagishi" as integer
これはエラー。

"1"+ 2は失敗したけど
"1"+ 2 as string とすると2がstring型に変換されてから結合が行われるので
"12"
と成功する。

(3.0/2.0) as integer
整数の答えが返ってくる。
この場合3.0/2.0の答え1.5を整数にしているので、四捨五入ではなく小数点以下が切り捨てられた1という答えが返ってくる。


Maxscriptでは型がもう1つ大きなくくりで分けられているようだ。リファレンスを見るとIntegerとFloatはNumber値という事になっている。

SuperClassof 1.0
SuperClassof 1

実行結果はともにNumber。

MAXscriptではこの他に3Dのデータを扱うための様々な型が準備されている。
[10,20,30] のようなpoint3とか。
 詳しくは「値>基本的なデータ値」 を参照。

スクリプトをやらなくても、ツールによってはこれらを意識させられるものがある。
例えば「パラメーター編集」でパラメーターを追加する時など。


これも普段ほとんど意識する事はないけど、
ソフト内で扱われる数値にも型があるのが分かる。
Radius = float
Segments = integer

ちなみに、スクリプトリスナーの消去はCTRL+D


型の概念はどの言語でも大体同じようだ。(ベースとなるC++とかに依存しているんですかね?)

例えばPythonでは type()を使って調べる事が出来る。

 型の変更(キャスト)は

異なる型の計算結果

 
「値には型があるという事を認識する」という事で今回はここまで。

0 件のコメント:

コメントを投稿