Posted at

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

More than 1 year has passed since last update.

環境 : 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]

を使うと良いと思います