MAXScript に関する質問と回答 > 関数の後ろに () を使用するのはどのような場合ですか。 |
MAXScript の関数は変数に格納されます。関数のなかには引数を取得しないものもありますが、その他では 1 つ以上の引数 (パラメータ) が予想されます。
関数の名前だけを入力しても、実際には関数を呼び出したことにはならず、MAXScript に関数の格納されている変数を出力するように指示しているだけです。
例: |
"Hello World!" と出力するカスタム関数を定義してみましょう。 |
fn printHello = ( format "Hello World!\n") |
結果: |
printHello() |
MAXScript によって、新しい関数が定義されたことが示され、関数の呼び出し方が示されます。 |
関数の名前だけを入力しても、実際には関数を呼び出したことにはならず、MAXScript に関数の格納されている変数を出力するように指示しているだけです。
例: |
() を付けずに関数名のみをタイプしてみましょう。 |
printHello |
結果: |
printHello() |
MAXScript によって、変数 printHello は、示されているとおりに呼び出される関数の特定の定義をポイントすることが示されます。 |
私たちが使用する関数では操作対象となる引数をとらないため、指示されたとおりの操作で関数を呼び出すことができます。
例: |
() 付きの関数名をタイプしてみましょう。 |
printHello() |
結果: |
Hello World! OK |
MAXScript によって関数が実行され、文字列 "Hello World!" がリスナーに出力された後、関数の戻り値が OK として返されます。 |
1 つの引数をとる関数を定義する場合でも、引数を囲む括弧を使用することができます。その他の言語では、引数を囲む括弧が必須となっている場合があります。そのような言語では、() の形は引数を渡す特殊なケースであり、引数を伴いません。
ただし、MAXScript の場合、引数が関数に渡されない場合を除き、括弧は任意です。
例: |
"Hello World" と出力するカスタム関数を定義してみましょう。 |
fn printAValue theValue = ( format "The Value Is %\n" theValue) |
結果: |
printAValue() |
MAXScript によって、新しい関数が定義されたことが示されており、関数の呼び出し方法が示されますが、引数の数についてはまだ何も示されていません。戻り値は MAXScript 関数が定義されたことのみを示しています。 |
() を付きだが引数を伴わない関数を呼び出す場合、関数はエラー メッセージを返し、望まれる内容を示します。
例: |
() 付きの関数名をタイプしてみましょう。 |
printAValue() |
結果: |
-- Argument count error: printAValue wanted 1, got 0 |
MAXScript によって関数実行が試行されますが、引数が不十分であるため、エラーが発生します。 |
引数値を括弧内に入力することで、関数を望みどおりに動作させることができます。
例: |
括弧内に関数を入力してみましょう。 |
printAValue(pi) |
結果: |
The Value Is 3.14159 OK |
MAXScript によって関数が実行されます。引数が十分であるため正しい結果が生成されます。 |
ただし、上述のとおり、MAXScript では引数を囲む括弧は必須ではないため、省略することもできます。
例: |
括弧で囲まない形で引数を入力してみましょう。 |
printAValue pi |
結果: |
The Value Is 3.14159 OK |
ご覧のとおり、結果は同じです。 |
同じことが、ジオメトリ プリミティブのコンストラクタ関数のように、プラグインおよび MAXScript 自身によって実装された関数にも該当します。
例: |
() を付けずに Box のコンストラクタを入力します。 |
box |
結果: |
Box |
MAXScript によって、変数 box には関数 Box が格納されていることが通知されます。 |
引数なしで関数を呼び出すためには、関数にパラメータが何も渡されないことを通知する必要があります。
このために、関数名の末尾に括弧のペア () を追加します。
例: |
() を付けて Box のコンストラクタを入力します。 |
box() |
結果: |
$Box:Box01 @ [0.000000,0.000000,0.000000] |
MAXScript によって、パラメータを伴わない(そのため位置、サイズのようなすべてのプロパティの既定値を使用する)Box コンストラクタ関数が実行されます。 |