repeat-untilループ
CoddyのLuaジャーニー「基礎」セクションの一部。レッスン 72/90。
Luaには、repeat-untilループと呼ばれる別の種類のループがあります。これは、今学んだwhileループとは異なる特徴を持っています。主な違いは、条件に関係なく、repeat-untilループは少なくとも1回はコードブロックを実行することです。
構文は次のようになります。
repeat
-- 繰り返し実行するコード
until condition条件は、コードがすでに1回実行された後、最後に確認されることに注目してください。条件がtrueになるまでループは繰り返し続けます。これは、条件がtrueである間続くwhileループとは逆です。
サイコロを振って6が出るまで繰り返す実践的な例を見てみましょう。
local roll = 0
repeat
roll = math.random(1, 6) -- 1から6までの数字をランダムに出す
print("Rolled:", roll)
until roll == 6
print("Finally got a 6!")このループでは、少なくとも1回はサイコロを振ることが保証され、条件 roll == 6 が真になるまで振り続けます。この「まず実行し、あとで確認する」という動作により、続けるかどうかを決める前に何かを少なくとも1回は実行する必要がある場面では、repeat-until ループが最適です。
チャレンジ
簡単簡単なパスワード検証のシミュレーションを作成します。
- 変数
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つ読み取り、それを出力してから次に進みます。正しいパスワードが見つかるまで、ループは続きます。
自分で試してみよう
-- 変数を初期化する
local password = ""
local correctPassword = "secure123"
-- パスワードの試行リスト
local attempts = {"password", "123456", "admin", "secure123"}
local index = 1
-- TODO:
-- repeat-until ループを使って、次の処理を行う:
-- 1. 現在試しているパスワードを password に代入する
-- 2. 試したパスワードを出力する
-- 3. 次の試行に進む
-- password が correctPassword と一致したら停止するこのレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
自分で練習してみよう: Luaオンラインコンパイラ