repeat-until ループ
CoddyのLuaジャーニー「Fundamentals」セクションの一部 — レッスン 72/90。
Luaは、repeat-untilループと呼ばれる別の種類のループを提供しています。これには、先ほど学んだwhileループとは異なるユニークな特徴があります。主な違いは、条件に関係なく、repeat-untilループは常に少なくとも一度はそのコードブロックを実行するという点です。
構文は次のようになります:
repeat
-- 繰り返すコード
until condition条件は、コードが一度実行された後の最後にチェックされることに注意してください。ループは、条件が true になるまで繰り返され続けます。これは、条件が true である間継続する while ループとは逆です。
6が出るまでサイコロを振るシミュレーションを行う実用的な例を以下に示します:
local roll = 0
repeat
roll = math.random(1, 6)
print("Rolled:", roll)
until roll == 6
print("Finally got a 6!")このループは、少なくとも1回はサイコロを振ることを保証します。そして、条件 roll == 6 が真(true)になるまで振り続けます。この「まず実行し、後でチェックする」という動作により、repeat-until ループは、続行するかどうかを判断する前に、少なくとも1回は何かを実行する必要がある状況に最適です。
チャレンジ
簡単あなたは簡単なパスワード検証シミュレーションを作成しています。
passwordという名前の変数を作成し、空の文字列 ("") に設定します。correctPasswordという名前の別の変数を作成し、"secure123"に設定します。attemptsという名前のテーブルを作成し、以下のパスワード試行を順番に含めます。"password""123456""admin""secure123"
indexという名前の変数を作成し、1に設定します。これを使用して、現在どの試行を行っているかを追跡します。repeat-untilループを使用して以下を行います。attempts[index]を使用して現在の試行をpasswordに代入します。これはテーブルのindex番目の項目を読み取ります。- 現在の
passwordを出力します。 - 次の試行に進むために、
indexを 1 増やします (例:index = index + 1)。
- ループは、
passwordがcorrectPasswordと等しくなったときにのみ停止する必要があります。
ループが実行されるたびに、テーブルから1つの試行を読み取り、それを出力してから次に進みます。正しいパスワードが見つかるまでループは続きます。
チートシート
repeat-untilループは、条件をチェックする前に少なくとも一度はコードを実行します。条件がtrueになるまで、繰り返しを継続します。
構文:
repeat
-- 繰り返すコード
until condition例 - 6が出るまでサイコロを振る:
local roll = 0
repeat
roll = math.random(1, 6)
print("Rolled:", roll)
until roll == 6
print("Finally got a 6!")whileループとの主な違い:
- 常に少なくとも一度は実行される
- 条件は最後にチェックされる
- 条件が
trueになるまで継続する(whileとは逆)
自分で試してみよう
-- 変数を初期化する
local password = ""
local correctPassword = "secure123"
-- パスワード試行のリスト
local attempts = {"password", "123456", "admin", "secure123"}
local index = 1
-- TODO:
-- repeat-untilループを使用して以下を行います:
-- 1. 現在の試行を `password` に代入する
-- 2. 試行したパスワードを表示する
-- 3. 次の試行に進む
-- password が correctPassword と一致したら停止するこのレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。