[[Lua演習]]&br;
*''第2課 制御構文1 条件分岐'' [#ged5e3b6]
**準備 [#j777bed5]
今回はfunction OnFrame〜endを以下のように書きかえる
function OnFrame()
if true then
out(0, "1");
end
if false then
out(1, "2");
end
if 1 then
out(2, "3");
end
if 0 then
out(3, "4");
end
if "さばとたん" then
out(4, "さばとたん");
end
if "" then
out(5, "かわいい");
end
if nil then
out(6, "nil");
end
variable = 1;
if variable then
out(7, "variable");
end
if sabato then
out(9, "sabato");
end
end
**if文による制御 [#d4efcd77]
if文を用いることで一定の条件(キーが押されたとか)によってLuaの実行内容を切り替えられる。
if文は、「if 値 then」の書式で実行する条件を記述し、then〜endの間に条件を満たした場合に実行する内容を記述する。
上の例では説明のために多くの場合で値の部分に変数ではなく値をそのまま入れているが、通常は無意味なのでやらない。
条件については後述
**if文の条件判断 [#fc74e8e0]
「if 値 then」の書式においてifとthenの間にある値をこのifの条件や条件式という。そして、条件の値がnilとfalse以外のあらゆる値であればthen〜endの内容が実行され、条件の値がnilかfalseであったときだけスキップする。
実行する場合、"if文の条件を満たした"といい、スキップする場合は"条件を満たさなかった"という。
**if-else文・elseif文 [#g73cfc8c]
今度はfunction OnFrame〜endを以下のように書きかえる
function OnFrame()
if true then
out(0, "true");
else
out(0, "not true");
end
if false then
out(1, "true");
else
out(1, "false");
end
if 1 == 2 then
out(2, "1==2");
elseif 1 < 2 then
out(2, "1 < 2");
end
if 3 == 1 then
out(3, "3 == 1");
elseif 3 == 2 then
out(3, "3 == 2");
elseif 3 == 3 then
out(3, "3 == 3");
end
if 2 == 0 then
out(4, "2==0");
elseif 2 == 1 then
out(4, "2==1");
elsd
out(4, "others");
end
end
上記のように、"if 値 then〜end"の構文の"then〜end"の部分に"else"を加えることによって、
「条件を満たした場合に実行する部分」をthen〜elseの前までに限定し、
一方で「条件が満たされなかった場合」にelse〜endの部分が実行されるようにできる。
また、elseではなく、 elseif 値 thenとすることで、「条件が満たされなかった場合」に
再び条件を判断して処理を分岐することができる。elseifの場合も条件についてはifの条件と同じである。
elseifはいくつでも記述可能で、その場合ifを含めて上から順に条件を見ていき、1つでも条件を満たされれば
そこの内容を実行し、対応するendまでのelseif文やelse文はすべてスキップする。そして、1つも条件が満たされなかった場合は、もしあればelseの内容を実行する。
**if文の構文まとめ [#xb1f60dc]
if 条件1 then
if文の内容
elseif 条件2 then --elseif文1
elseif文1の内容
elseif 条件3 then --elseif文2
elseif文2の内容
以下elseif文を気が済むまで並べる
....
else
else文の内容
end
ただし、elseif文はいくつでも書くことができるが、else文は1つ書くか、もしくは書かないかしかない。
後、各文の順番は、elseよりあとにelseifがあってはならない。
**if文のネスト [#r5a2cabb]
今度はfunction OnFrame〜endを以下のように書きかえる
function OnFrame()
if true then
if false then
out(1, "true");
else
out(1, "false");
end
if 1 then
out(0, "true");
else
out(0, "false");
end
else
if 1 then
out(0, "true");
else
out(0, "false");
end
if false then
out(1, "true");
else
out(1, "false");
end
end
end
上記のようにif文の中にはまた別のif文を書くことができる。その場合、当然ながら外側のif文の条件を満たさなければ内側はそもそも実行されない。
また、if文の条件が満たされなかった場合にスキップされるのはあくまでも"対応するend(かelseif,else)"までなので、
上記
if true then
if false then
out(1, "true");
else--上のifでのスキップはここまで
out(1, "false");
end
if 1 then
out(0, "true");
else
out(0, "false");
end
else--ここまで飛んできたりはしない
において"if false then"でスキップされるのは直後のelseまでであり、外側のif文のelseではない。
前:[[第1課 値と変数>Lua講座_1_1]] 次:[[第3課 ループ制御>Lua講座_1_3]]