GameMaker
GML
GameMakerStudio2
GameMakerLanguage

引数、argument0 と argument[0] の違いは?

環境 : Gamemaker Studio 2 (platform : HTML5)
結論 : argument0 必須の引数。argument[0] 任意の引数のとき。

こんばんは。Aki @aki_0o0_です。スクリプトで関数を定義した時に、引数を受取る書き方が2種類あったので、なにが違うのか調べました。

違い

argument[0]

値を渡し忘れたら、実行するまでエラーにならない。ので気づくのが遅れる。

例えば、こういう関数を用意します。

draw_score_optional.gml
///@param posx
///@param posy
///@param num

var posx = argument[0];
var posy = argument[1];
var num = argument[2];

draw_score_optional(x, y, 999);
こう呼ぶとするとき、

draw_score_optional();
引数を書き忘れても、
特に何も表示されずに、コンパイルも通って、
実際その処理の呼び出しが実行されるまでエラーにならないんですね。

argument0

値を渡し忘れたら、エディタで書きながらエラーが表示されるので、分かりやすい。
そのままコンパイルすると、コンパイルエラーにしてくれる。親切!

例えば、

draw_score_required.gml
///@param posx
///@param posy
///@param num

var posx = argument0;
var posy = argument1;
var num = argument2;

draw_score_required(x, y, 999);
こう呼ぶとするとき、

draw_score_required();
引数を書き忘れたら、エディタで赤くなるからすぐわかる。
もしそのままコンパイルしても、エラーになって修正するまでは実行されないから、すぐに気づけますね。

デフォルト引数を使って省略できる

じゃあこっち(argument[0])は要らない子なのかというと、そんなこと無いです
どんな時に使うかというと、デフォルト引数を使いたい時です。

draw_score_default_argument.gml
///@param posx
///@param posy
///@param num
///@param color

var posx = argument[0];
var posy = argument[1];
var num = argument[2];

var color = c_white;
if (argument_count >= 4) {
    color = argument[3];
}

draw_score_default_argument(x, y, 999);
白色で良い時、

draw_score_default_argument(x, y, 999, c_red);
色を指定したい時

終わり

というわけで、
必須の引数は、argument0
任意の引数は、argument[0]
を使うと良いと思います