目次
while文の基本 / break (ループを途中で終了する) / ネストしたwhileとbreakの挙動 /
continue相当の処理 / gotoによるcontinue(Lua 5.2以降)
while文とは
| while 条件 do 処理 end |
- 条件が trueの間、繰り返します
- 条件が最初からfalseなら 一度も実行されません
- 条件をfalseにするロジックがないと無限ループになるので注意が必要です
while文のサンプル
while文の基本
i = 0
while i < 5 do
print(i) -- 0 1 2 3 4
i = i + 1
end
値が5より小さい間、処理を繰り返します。
break (ループを途中で終了する)
i = 0
while i < 5 do
if i == 3 then
break
end
print(i) -- 0 1 2
i = i + 1
end
breakはループを即終了
ネストしたwhileとbreakの挙動
i = 0
while i < 2 do
j = 0
while j < 3 do
if j == 1 then
break
end
print("j=" .. j) -- j=0 j=0
j = j + 1
end
print("i=" .. i) -- i=0 i=1
i = i + 1
end
- breakは内側のwhileのみ終了
- 外側のwhileには影響しない
全部のループを抜けたいと思ってもbreakではできません。
→ フラグ変数や関数化で制御するのが一般的です。
continue相当の処理
Luaにはcontinueがありません。
ifで制御します。
i = 0
while i < 5 do
if i ~= 3 then
print(i) -- 0 1 2 4
end
i = i + 1
end
gotoによるcontinue(Lua 5.2以降)
Lua 5.2以降では goto が使えます。
ただし、可読性が下がるため基本は非推奨です。
i = 0
while i < 5 do
if i == 3 then
i = i + 1
goto continue
end
print(i) -- 0 1 2 4
i = i + 1
::continue::
end
5行目のインクリメントがないと無限ループになるので注意が必要です。
repeat ... until(後判定ループ)
repeat ... untilは、必ず1回は実行されます。
条件のチェックのタイミングは、ループの後です。条件がtrueになったら終了します。
i = 0
repeat
print(i) -- 0 1 2 3 4
i = i + 1
until i >= 5
空文字(何も入力されていない)なら、入力をやり直させるループの例
repeat
print("Please enter something")
input = io.read()
until input ~= ""
print("The contents are " .. input)
処理の流れ
- メッセージを表示 (Please enter something)
- 入力を受け取る (input = io.read())
- 空文字かチェック (input ~= "")
- 空なら繰り返し
- 空でなければ終了してprint
関連の記事
