Lua while文のサンプル(break/continue)

Luaのwhile文のサンプルです。条件で処理の繰り返しを制御します。

目次

while文 while文 / while文のサンプル
break ループを途中で終了する(break)
  入れ子のときにbreakを使用する
continue ループで処理をスキップする(continueに当たる処理)
  入れ子のときにcontinueに当たる処理を使用する
do...while文 do...while文にあたる書き方

while文

while 条件式 do
       処理
end
  • 条件式がtrueの間、処理を繰り返します。
  • 条件式がfalseの場合、処理を終了します。
  • 最初の条件の判定でfalseの場合、処理を1回も実行しません。
  • 処理に条件式をfalseにするロジックがないと無限ループになるので注意が必要です。

 

while文のサンプル


i = 0

while i < 3 do
	print(i) -- 0 1 2が出力される
	i = i + 1
end

4行目は、値が3より小さい間、処理を繰り返します。
6行目は、条件になる値を加算しています。

 

ループを途中で終了する(break)

ループを途中で終了するサンプルです。


i = 0

while i < 5 do
	if i == 3 then
		break
	end
	print(i) -- 0 1 2が出力される
	i = i + 1
end

6行目のbreakは、while文を抜けます。
そのため8行目の文字列の出力は0,1,2のみ出力されます。

 

入れ子のときにbreakを使用する

入れ子のときにbreakを使用するサンプルです。


i,j = 0,0

while i < 2 do
	while j < 2 do
		if j == 0 then
			break
		end
		print("j="..j) -- 出力なし
		j = j + 1
	end
	print("i="..i) -- i=0 i=1が出力される
	i = i + 1
end

 

ループで処理をスキップする(continueに当たる処理)

他言語でのcontinueにあたる処理を行うサンプルです。

Luaにはcontinueがありません。gotoとラベルで代用します。


i = 0

while i < 5 do
	if i == 3 then
		goto continue
	end
	print(i) -- 0,1,2,4が出力される
	::continue::
	i = i + 1
end

6行目のgotoとラベル(continue)は、9行目に飛びます。
このサンプルでは10行目の加算がないと無限ループになるので注意して下さい。

 

入れ子のときにcontinueに当たる処理を使用する

入れ子のときにcontinueに当たる処理を使用するサンプルです。


i,j = 0,0

while i < 2 do
	while j < 2 do
		if j == 0 then
			goto continue
		end
		print("j="..j) -- j=1が出力される
		::continue::
		j = j + 1
	end
	print("i="..i) -- i=0 i=1が出力される
	i = i + 1
end

4,5行目にwhile文があり入れ子になっています。
7行目のgotoとラベルは、10行目に飛びます。

 

do...while文にあたる書き方

  • do...while文にあたる書き方のサンプルです。
  • 処理は、必ず1回は実行されます。
  • 処理に、条件をfalseにするロジックがないと無限ループになるので注意が必要です。

a,b = 0,0

repeat
	print(a) -- 0 1 2が出力される
	a = a + 1
until a == 3

while true do
	print(b) -- 0 1 2が出力される
	b = b + 1
    if b > 2 then
        break
    end
end

4行目のrepeatから7行目のuntilでループします。untilの横に条件があります。最初の1回は必ず実行されます。

9行目は、while trueで最初の1回は必ず実行されます。
11行目は、ループの変数を1加算しています。
12行目の条件がtrueになったときに13行目のbreakでwhile文を抜けます。

関連の記事

Lua if文のサンプル
Lua for文 処理を繰り返すサンプル(break/continue)

△上に戻る