Skip to content

while ループ

for は「既知のコレクションを巡回する」シナリオに適していますが、while は別のケースに適しています——**ループ回数が分からず什么时候该停下来只知道何时停止する場合です。

基本構文

構文仕様における while 文の定義:

while Expr Block

構造はとてもシンプルです:while の後に条件式,紧接着跟随循环体代码块。只要条件が true であれば、循环体は 계속해서実行されます。

yaoxiang
mut count = 1

while count <= 5 {
    print(count)
    count = count + 1
}
// 出力:1 2 3 4 5

注意として、mut count で変数を宣言する必要があります——因为 count 会在循环中被修改。如果写成 count = 1(不変)として书いた場合、循环体内の count = count + 1 就会报错。

while の実行フロー

while ループの実行手順は以下の通りです:

  1. 条件式を評価する
  2. 条件が true であれば、循环体を実行し、步骤 1 に戻る
  3. 条件が false であれば、ループを終了し后续のコードを実行する

条件は各反復の開始前に評価されます。最初から条件が false であれば、循环体は一度も実行されません:

yaoxiang
mut n = 0
while n > 0 {
    print("この文章は永久に表示されない")
    n = n - 1
}
// 条件 n > 0 は最初から false なので、循环体は直接スキップされる

break:ループの早期退出

ループ途中で早期に退出する必要がある場合があります——例えば、検索対象を見つけた場合など:

yaoxiang
numbers = [3, 7, 2, 9, 5]
mut found = false
mut index = 0

while index < 5 {
    if numbers[index] == 9 {
        found = true
        break      // 見つけた、これ以上探必要はない
    }
    index = index + 1
}

print("見つかったか?" + found.to_string())  // "見つかったか?true"

break はプログラムを直ちに現在のループから抜け出し、后续のコードを実行します。

continue:現在の反復をスキップ

continuebreak とは異なり——循环を抜けるのではなく、現在の反復の残りの部分をスキップして、次の条件チェックに直接进みます:

yaoxiang
mut n = 0
while n < 5 {
    n = n + 1
    if n == 3 {
        continue   // 3 をスキップ、印刷しない
    }
    print(n)
}
// 出力:1 2 4 5

このコードでは、n が 3 のとき、continueprintln(n) をスキップし、直接 while n < 5 の条件チェックに戻ります。

無限ループを避ける

while を使用する際は特に注意が必要です——循环条件が最終的に false になることを確認してください。さもなくば、プログラムが永久に停止してしまいます:

yaoxiang
// 危険!無限ループ——条件は永久に true
// mut x = 1
// while x > 0 {
//     x = x + 1     // x は越来越大,永远不会 <= 0
// }

// 正しい——明確な終了条件がある
mut x = 1
while x <= 5 {
    print(x)
    x = x + 1        // x は逐渐增大,最终 x > 5 でループ終了
}

while による入力読み取り

while の古典的なシナリオの1つは、不确定な長さの入力を处理することです——ユーザーの入力回数が分からず、"入力が空になった時に停止する"ことだけが分かっている場合です:

yaoxiang
// 擬似コード例——while の典型的な使用方法を示す
// read_line は空行读到空行时返回空字符串时返回空字符串
mut line = read_line()
while line != "" {
    process(line)
    line = read_line()
}

この「条件チェック → データ処理 → 条件更新」というパターンが while の핵심的な使用パター范式です。

小まとめ

| 要点 | 説明 | | 適用シーン | ループ回数が分からず、終了条件だけが分かる | | 構文 | while 条件 { ... } | | 実行フロー | まず条件を評価し、次に循环体を実行する | | break | 直ちにループを終了する | | continue | 現在の反復をスキップし、条件評価に戻る | | 注意事項 | 条件が最終的に false になることを確認し、無限ループを避ける |

次の章では match の基礎——YaoXiang 最も強力な分岐制御ツールについて学びます。