[[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]]

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS