a = b; c = d; //動く a = b c = d; //エラー a = {c = d;}; //動く a = {c = d}; //これでも良しコードを示すカッコ}を閉じる直前にあるコードのセミコロンは省くことが出来る。SQFファイルの一番最後のセミコロンも同様に省くことが出来る。ファイルの終わりはコードの終わりだ。それでも必要ないところにセミコロンを置いても損はない。
while {true} do {hint "ok"; breakOut ""} //動く while {true;} do {hint "ok too"; breakOut "";}; //これも動くただし引数を渡すとき、セミコロンはかえってエラーを起こす原因となる点には注意しよう。
a = {"ok"}; hint format ["%1",call a;]; //エラー a = {"ok"}; hint format ["%1",call a]; //イイネ()についても同じことが言える。括弧はエンジンに処理の順番を教えるために使われる。一番内側の括弧が一番最初に処理され、次にその親、その次にさらにその親、といったふうに処理される。(((1) 2) 3)。例えば入れ子になった配列の値を取得するときなど。(追記:select命令は括弧を省いて使うことも出来る。_eight = _array select 3 select 4 select 0;はいつものように動く。)
_array = [1,2,3,[4,5,6,7,[8,9]]]; _eight = ((_array select 3) select 4) select 0;上と同じ結果は別々に分けても可能である。
_array1 = _array select 3; _array2 = _array1 select 4; _eight = _array2 select 0;命令を的確に括弧でくくらないと、予測不能な結果を示すことがある。次の例を見てみよう。
//正しくない {diag_log format ["%1",_x]} forEach position player nearObjects 50; //正しい {diag_log format ["%1",_x]} forEach ((position player) nearObjects 50);前者の例はエラーにこそならないが、式の答えはデタラメな数字で予想されたものではない(注:上の例ではnearObjects以降は無視され、position playerがforEachで繰り返されます)。予想された答えはプレイヤーから50m以内のオブジェクトを返すスクリプトで、二番目のスクリプトは括弧のおかげでまさにそのように動く。
ああそうだ、同じ記事のうちにどうやって関数を呼び出すか話しておこう。でもその前に値を一つ代入する単純な関数を作ってみよう。値はプライベートかパブリックのどちらでも良い。関数を呼び出すときはcallを使おう(この後もっと命令を紹介しよう)。
my_function = { a = 1; b = 2; c = a + b; }; call my_function; //cは3になった関数は返り値を返せるのと同じく引数も取ることが出来る。callを使って引数を渡すときは、callの前に引数する値を置こう。複数の引数を渡す必要があるときは、配列が使える。渡された引数は関数の中で特殊変数_thisに代入される。返り値を返すときは関数の一番最後に値か、未評価の値を置く必要がある。
//こんな感じに my_function = { private ["_a","_b","_c"]; _a = _this select 0; _b = _this select 1; _c = _a + _b; _c }; //あるいは my_function = { (_this select 0) + (_this select 1) }; _result = [1,2] call my_function; //_resultは3(注:上の例の_cが「値」、下の例の(_this select~~が「未評価の値」です)
二番目の例の括弧は、外すと動かなくなる。基本の話はこれで終わり、助けになれると嬉しい。
Enjoy,
KK
KK's blog – ArmA Scripting Tutorials: Basics by Killzone Kid
Translated by POLPOX
Translated by POLPOX
0 件のコメント :
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。