式
MAXScript は、式ベースの言語です。言語ではすべての構文が式であり、結果が生成されます。これには、他の言語がステートメントとして扱う構文も含まれます。これにより、言語の構文が簡略化され、表現力に富んだコードを構築できます。 <expr> 式を書き込むことができるすべての場所に、MAXScript の任意の構文を書き込むことができます。
if 構文がその良い例です。通常、ステートメント ベースの言語では、 if ステートメントと条件式にそれぞれ 1 つの構文があります。MAXScript ではどちらの場合でも 1 つの構文を使用します。
例:
|
次に示す 2 行のコードはいずれも有効で、その意味も明確です。
|
if a > b then print c else print d
x = if a > b then c else d
|
次のように、ネストされた if 式と、それ自体が式であるネストされた代入を含む行を記述することもできます。
|
x = if (if a > b then c else d) < e then f else (g = 23)
|
<block_expr> で表すブロック式の例もあります。これには、カッコで囲まれた一連の <expr> 式が含まれています。
例:
|
a = 2
b = 1
(
print a
print b
if a > b then print "the big a"
)
|
ブロック内の各式は改行で区切られますが、次のように「;」(セミコロン)で式を区切って複数の式を 1 行に記述することもできます。
例:
|
(print a; print b; if a > b then print "the big a")
|
ブロック式はそれ自体が <expr> 式です。シーケンス内のコンポーネント式が評価され、その値はブロックの中の最後の式の値になります。
従来のブロック構造ステートメントを作成するには:
次のように記述できます。
|
c = 3
d = 4
if a > b then
(
print c
x = sqrt (c)
)
else
(
print d
x = sin (e)
)
|
または、
|
次のようにネストされたブロック式を使って、比較オペランドを計算することもできます。
|
if a > (y = sin b; sqrt(y * z)) then print c
|
最も単純な MAXScript プログラムは <expr> 式で構成されます。
<expr> は、次のいずれかの項目として定義されます。
<simple_expr>
<variable_decls>
<assignment>
<context_expr>
<if_expr>
<while_loop>
<do_loop>
<for_loop>
<loop_exit>
<case_expr>
<try_expr>
<function_def>
<function_return>
<struct_def>
<max_command>
<utility_def>
<rollout_def>
<tool_def>
<rcmenu_def>
<plugin_def>
この、式のリストは、MAXScript の主な構文を構成します。