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文を抜けます。
関連の記事