Lua演習

第2課 制御構文1 条件分岐

準備

今回は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文による制御

if文を用いることで一定の条件(キーが押されたとか)によってLuaの実行内容を切り替えられる。 if文は、「if 値 then」の書式で実行する条件を記述し、then〜endの間に条件を満たした場合に実行する内容を記述する。 上の例では説明のために多くの場合で値の部分に変数ではなく値をそのまま入れているが、通常は無意味なのでやらない。 条件については後述

if文の条件判断

「if 値 then」の書式においてifとthenの間にある値をこのifの条件や条件式という。そして、条件の値がnilとfalse以外のあらゆる値であればthen〜endの内容が実行され、条件の値がnilかfalseであったときだけスキップする。 実行する場合、"if文の条件を満たした"といい、スキップする場合は"条件を満たさなかった"という。

if-else文・elseif文

今度は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文の構文まとめ

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文のネスト

今度は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課 値と変数 次:第3課 ループ制御


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-05-16 (日) 21:52:13