もう迷わない!Rustのwhile文の書き方と実践的な使い方を解説

2025年4月20日日曜日

Rust

Rustのwhile文、使ってみたいけど、どう書けばいいのか、どんな時に使うのか、イマイチよくわからない…なんて悩んでいませんか?

プログラミングで繰り返し処理は必須テクニックですが、Rustには他にもループの方法があって、どれを使えばいいか迷うこともありますよね。

この記事では、Rustのwhileループについて、基本のキからしっかり解説していきます! サンプルコードもたくさん用意したので、実際に動かしながら学べますよ。

この記事で学べること

  • Rustのwhile文の基本的な考え方
  • while文の具体的な書き方(構文)
  • サンプルコードで学ぶwhile文の使い方
  • ループを抜けたりスキップしたりする方法(breakとcontinue)
  • while文を使うときの注意点(無限ループとか!)
  • 他のループ(loopやfor)との使い分けのヒント

Rustのwhileとは?基本的な役割を理解しよう

プログラミングをしていると、「この条件が満たされている間、ずっと同じ処理を繰り返したいな〜」という場面がよくあります。

例えば、ゲームでHPが0になるまで敵に攻撃を続けるとか、ダウンロードが終わるまで待機するとか。そんな時に活躍するのがループ処理です。

そして、特定の「条件」が成り立っている間だけ処理を繰り返す、というのがwhile文の基本的な役割です。「お湯が沸く(条件)まで、火にかける(処理を繰り返す)」みたいなイメージですね。

条件が成り立たなくなったら、ループは自動的にストップします。シンプルで分かりやすいでしょう? Rustにももちろん、この便利なwhile文が用意されています。

条件チェック → True → 処理実行 → 条件チェック ...
         ↓ False
       ループ終了

Rustのwhileの基本的な書き方

じゃあ、実際にRustでwhile文はどう書くのでしょうか? 書き方はとっても簡単! 基本的な形はこうなっています。

while 条件式 {
    // 条件式が true の間、繰り返したい処理を書く場所
    // 例: println!("ループ中!");
}

ポイントを分解してみましょう。

  • while これは「これからwhile文を始めますよ」という合図のキーワードです。
  • 条件式 ループを続けるかどうかを判断するための式を書きます。この式の結果がtrue(真)の間、ループは続きます。false(偽)になったらループは終わります。ここは必ずtruefalseを返す式(bool値)にしてくださいね。
  • { } 波括弧で囲まれた部分が、繰り返し実行される処理ブロックです。この中に、ループさせたい処理をいくつでも書けます。

例えば、while true { ... } と書くと、条件式が常にtrueなので、無限にループし続けます(止める方法も後で説明しますよ!)。

Rustのwhileの使い方

基本的な書き方がわかったところで、ここからは実際にwhile文を使ったコードを見ていきましょう! 百聞は一見にしかず、コードを動かしてみるのが一番の近道です。

カウンター変数を使った基本的なwhileループ

まずは、一番オーソドックスな使い方から。while文とカウンター変数(数を数えるための変数)を組み合わせて、決まった回数だけ処理を繰り返してみましょう。

ここでは、1から5まで数えて表示するプログラムを作ります。

fn main() {
    let mut count = 1; // 数を数えるための変数を用意(変更するので mut が必要)

    println!("カウント開始!");

    while count <= 5 { // count が 5 以下である間、ループを続ける
        println!("現在のカウント: {}", count);
        count += 1; // count に 1 を足す(重要!)
    }

    println!("カウント終了!");
}

表示結果

カウント開始!
現在のカウント: 1
現在のカウント: 2
現在のカウント: 3
現在のカウント: 4
現在のカウント: 5
カウント終了!

解説

  1. 最初にlet mut count = 1;で、カウンター変数countを1で初期化しています。ループの中で値を変えるのでmutが必要です。
  2. while count <= 5で、「countが5以下の間」という条件を設定しています。
  3. ループの中では、まずprintln!で現在のcountの値を表示します。
  4. 次にcount += 1;countの値を1増やします。ここが超重要!もしこの行がないと、countはずっと1のままなので、条件式count <= 5が永遠にtrueになり、無限ループになってしまいます。
  5. countが6になった時点で条件式count <= 5falseになり、ループが終了します。
  6. 最後に「カウント終了!」と表示されます。

`break`でwhileループを抜ける方法

ループ処理をしていると、「条件はまだ満たされているけど、ある特別なことが起きたらループをすぐにやめたい!」という時があります。

そんな時に使うのがbreakです。breakを使うと、その時点で強制的にループから抜け出すことができます。

例えば、1から数え始めて、3になったらもう数えるのをやめる、という処理を書いてみましょう。

fn main() {
    let mut number = 0;

    while number < 10 { // 本来なら9まで数えるはずだけど...
        number += 1;
        println!("現在の数字: {}", number);

        if number == 3 {
            println!("おっと、3になったのでループを脱出します!");
            break; // ここでループを強制終了!
        }
    }

    println!("ループが終了しました。最終的な数字: {}", number);
}

表示結果

現在の数字: 1
現在の数字: 2
現在の数字: 3
おっと、3になったのでループを脱出します!
ループが終了しました。最終的な数字: 3

解説

ループの条件はnumber < 10なので、普通ならnumberが9になるまで繰り返されるはずです。
しかし、ループの中でif number == 3という条件をチェックしています。

numberが3になった時、このif文の中のbreak;が実行されます。

break;が実行されると、ループの強制終了が行われ、whileループの直後にあるprintln!の行に処理が移ります。結果として、4以降は表示されずにループが終わりました。

`continue`で処理をスキップして次の繰り返しへ進む方法

今度は、ループを途中で抜け出すのではなく、「今回はこの処理を飛ばして、次の繰り返しに進みたいな」という場合です。

そんな時に便利なのがcontinueです。continueを使うと、ループ内のそれ以降の処理をスキップして、すぐに次のループの条件判定に移ります。

例として、1から5まで数えるけど、3の時だけ表示をスキップする、という処理を見てみましょう。

fn main() {
    let mut number = 0;

    while number < 5 {
        number += 1;

        if number == 3 {
            println!("(3はスキップします)");
            continue; // これ以降の処理を飛ばして、次のループ(numberが4の場合)へ
        }

        // numberが3の時は、この行は実行されない
        println!("現在の数字: {}", number);
    }

    println!("ループ終了!");
}

表示結果

現在の数字: 1
現在の数字: 2
(3はスキップします)
現在の数字: 4
現在の数字: 5
ループ終了!

解説

ループの中でnumberを1増やした後、if number == 3をチェックしています。
numberが3になった時、println!でスキップすることを表示してからcontinue;が実行されます。

continue;が実行されると、その下にあるprintln!("現在の数字: {}", number);は実行されずに、次の繰り返しへジャンプします。つまり、すぐに次のwhile number < 5の条件判定(この時点ではnumberは3なので次は4の判定へ)に進むわけです。

結果として、3だけが表示されませんでした。break(ループ終了)とcontinue(今回の処理だけスキップ)の違い、しっかり掴んでおきましょう。

Rustのwhileを使う上での注意点

while文はシンプルで便利ですが、使う上でいくつか気をつけておきたい点があります。うっかりミスを防いで、より良いコードを書くために知っておきましょう。

無限ループに注意!

先ほど少し触れましたが、while文で最も注意したいのが「無限ループ」です。これは、ループの条件式がいつまで経ってもfalseにならず、プログラムが終わらなくなってしまう状態のこと。

無限ループが起こる主な原因は以下の二つです。

  • 条件式が常にtrueになってしまう。
    例: while 1 < 2 { ... } (1は常に2より小さい)
  • ループの中で条件式に関わる変数を更新し忘れている。
    例: カウンターを使ったループでcount += 1;を書き忘れる(先ほどの例)。

意図しない無限ループは、プログラムがフリーズしたり、CPUを無駄に消費したりする原因になります。条件式のチェックと、ループ内で条件に関わる変数がちゃんと変化していくかの確認はしっかり行いましょう。

もちろん、意図的に無限ループを作って、breakで脱出するという書き方もできます。Rustにはそのためのloop構文もありますが、while true { ... if 条件 { break; } } のように書くことも可能です。

Rustにおける`loop`や`for`との使い分け

Rustにはwhile以外にも、繰り返し処理を行うための構文としてloopforがあります。それぞれの特徴を知って、場面に応じて使い分けるのが、Rustらしいコードを書くコツです。

  • loop
    • これは最初から無限ループを作るための構文です。
    • loop { ... } のように書きます。
    • 必ずループ内のどこかでbreakを使って脱出する必要があります(そうしないと本当に無限ループ!)。
    • 「とりあえず無限ループさせておいて、特定の条件で抜け出す」という場合に明示的に使われます。
  • for
    • 配列やベクタ、範囲(例: 1..5 は1から4まで)など、「イテレータ」と呼ばれる「連続したデータ」の要素を順番に取り出して処理するのに特化したループです。
    • for item in collection { ... } のように書きます。
    • カウンター変数を自分で用意したり、インクリメントしたりする必要がなく、安全で簡潔に書けることが多いです。
    • Rustではコレクション(配列など)の要素を順番に処理する場合は、forループを使うのが一般的で推奨されています。
  • while
    • 「特定の条件が満たされている間」繰り返す、という場合に適しています。
    • ループの継続条件が、回数ではなく、何らかの状態(例: ファイルの終端に達していない、エラーが発生していないなど)に基づいている場合に特に有効です。
    • カウンター変数を使ったループも書けますが、forで書けるならそちらの方がRustらしいことが多いです。

というわけで、適切なループを選ぶことが大切です。コレクションの要素を扱うならfor、無限ループが基本ならloop、そして条件ベースの繰り返しならwhile、という使い分けを意識してみてください。

【まとめ】Rustのwhileを理解して活用しよう!

お疲れ様でした! 今回はRustのwhile文について、基本的なことから応用的な使い方、注意点まで見てきました。

今回のポイントをまとめておきましょう。

  • while文は「条件式がtrueの間」処理を繰り返す。
  • 書き方は while 条件式 { 処理 }
  • breakでループを途中で抜けられる。
  • continueで現在の処理をスキップして次に進める。
  • 条件式や変数の更新忘れによる「無限ループ」には要注意!
  • Rustにはloopforもあり、場面によって使い分けるのが◎。

while文は、条件に基づいて繰り返し処理を行いたいときに非常に役立つ構文です。今回の内容を参考に、ぜひあなたのRustプログラムでも活用してみてくださいね!

プログラミングは書いて動かして、試行錯誤するのが上達への一番の道です。どんどんコードを書いて、Rustと仲良くなっていきましょう!

【関連記事】
Rustとは?いま学ぶべき理由と特徴や始め方を詳しく解説

このブログを検索

  • ()

自己紹介

自分の写真
リモートワークでエンジニア兼Webディレクターとして活動しています。プログラミングやAIなど、日々の業務や学びの中で得た知識や気づきをわかりやすく発信し、これからITスキルを身につけたい人にも役立つ情報をお届けします。 note → https://note.com/yurufuri X → https://x.com/mnao111

QooQ