Menu
Coddy logo textTech

repeat-until ループ

CoddyのLuaジャーニー「基礎」セクションの一部。レッスン 72/90。

Luaにはrepeat-untilループと呼ばれるもう1つの種類のループがあり、これは先ほど学んだwhileループとは異なる独自の特徴を持っています。主な違いは、repeat-untilループは条件に関係なく、常にそのコードブロックを少なくとも1回は実行する点です。

構文は次のようになります:

repeat
    -- 繰り返すコード
until condition

条件はコードが一度実行された後、最後にチェックされることに注目してください。ループは条件が 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 が真(true)になるまで振り続けます。この「最初に実行し、後で確認する」という挙動により、repeat-until ループは、継続するかどうかを判断する前に少なくとも1回は何かを実行する必要がある状況に最適です。

challenge icon

チャレンジ

簡単

シンプルなパスワード検証シミュレーションを作成します。

  1. password という名前の変数を作成し、空の文字列("")をセットします。
  2. correctPassword という名前の別の変数を作成し、"secure123" をセットします。
  3. 以下のパスワード試行値を順番通りに含む attempts という名前のテーブルを作成します:
    • "password"
    • "123456"
    • "admin"
    • "secure123"
  4. index という名前の変数を作成し、1 をセットします。これを使用して、現在どの試行を行っているかを追跡します。
  5. repeat-until ループを使用して以下を行います:
    • attempts[index] を使って現在の試行値を password に代入します — これはテーブルの位置 index にある要素を読み込みます
    • 現在の password を出力します
    • 次の試行に進むために index を 1 増やします(例: index = index + 1
  6. ループは passwordcorrectPassword と等しくなったときにのみ停止する必要があります。

ループが実行されるたびに、テーブルから 1 つの試行値を読み込んで出力し、次に進みます。正解のパスワードが見つかるまでループは継続します。

自分で試してみよう

-- 変数を初期化する
local password = ""
local correctPassword = "secure123"

-- パスワード試行のリスト
local attempts = {"password", "123456", "admin", "secure123"}
local index = 1

-- TODO:
-- repeat-untilループを使用して:
-- 1. 現在の試行を指示からの正確なテキストに割り当てる
-- 2. 試行したパスワードを出力する
-- 3. 次の試行に移る
-- passwordがcorrectPasswordと一致したら停止する
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン

自分で練習してみよう: Luaオンラインコンパイラ