【Rust入門#4】条件分岐とループをマスターしよう!if文・match式・for/while完全解説【初心者向け・2025年最新版】

こんにちは!Rust入門シリーズ第4回へようこそ。

これまでの講座では、Rustの開発環境を整え、「Hello, world!」の作成、変数や関数、データ型といった基本構文を学んできました。

今回は、プログラムの流れを制御する**「制御構文」**について、徹底的に解説していきます。

制御構文は、プログラムを「条件に応じて動かす」「繰り返す」などのロジックを作るために欠かせません。Rustの特徴を踏まえながら、以下の内容を実例付きでわかりやすく説明します。


🔰 対象読者

  • Rustを学び始めたばかりの初心者
  • C言語やPython経験者でRust構文を比較しながら学びたい方
  • Rustのif文、match文、for文の使い方を体系的に理解したい方

✅ Rustのif文:条件分岐の基本

Rustのif構文は他の言語に似ていますが、「式として扱える」など、Rustならではの特徴もあります。

基本的な書き方

fn main() {
    let score = 85;

    if score >= 90 {
        println!("優秀!");
    } else if score >= 70 {
        println!("合格!");
    } else {
        println!("再挑戦!");
    }
}

特徴

  • 条件式は**必ず真偽値(bool)**を返す必要があります
  • 括弧()は不要 → if (x > 5) はエラーになります

if文は「式」でもある

let is_even = if x % 2 == 0 { true } else { false };

このようにifは値を返す式としても使えます。


🧩 Rustのmatch文:パターンマッチングで柔軟な条件分岐

matchは、ある値に対して複数のパターンを定義し、それぞれのパターンに応じて処理を行う強力な制御構文です。

基本的な使い方

fn main() {
    let number = 3;

    match number {
        1 => println!("1です"),
        2 => println!("2です"),
        3 => println!("3です"),
        _ => println!("その他の数です"),
    }
}

応用例:Option型との組み合わせ

fn main() {
    let name: Option<&str> = Some("Taro");

    match name {
        Some(n) => println!("こんにちは、{}さん!", n),
        None => println!("名前が未設定です"),
    }
}

matchは「網羅性」が重要

  • 全てのパターンを記述しないとコンパイルエラーになります
  • OptionResultenum との相性が抜群です

💡 matchは「Rust if else の上位互換」とも言えるほど柔軟です!


🔁 Rustのループ処理:for / while / loopの違いと使い分け

Rustには3種類の繰り返し処理構文があります。それぞれ使いどころが異なるので、特徴を押さえましょう。

① for文:コレクションの反復処理

fn main() {
    let fruits = ["りんご", "バナナ", "みかん"];

    for fruit in fruits.iter() {
        println!("果物: {}", fruit);
    }
}
  • .iter()は要素を1つずつ取り出す反復処理を可能にする
  • enumerate()を使えばインデックスも取得可能
for (i, fruit) in fruits.iter().enumerate() {
    println!("{}番目の果物: {}", i + 1, fruit);
}

② while文:条件を満たす間繰り返す

fn main() {
    let mut count = 0;
    while count < 5 {
        println!("カウント: {}", count);
        count += 1;
    }
}
  • 条件がfalseになるまで処理を繰り返します
  • 無限ループを避けるためにbreak条件を必ず入れましょう

③ loop文:無限ループ(明示的にbreakが必要)

fn main() {
    let mut count = 0;
    loop {
        if count >= 3 {
            break;
        }
        println!("loop中: {}", count);
        count += 1;
    }
}
  • loopは条件が不要な最小構成のループです
  • returnで関数ごと脱出することも可能

breakcontinuereturnの使い分け

  • break: ループから抜ける
  • continue: 次の繰り返しに進む
  • return: 関数自体を終了する

🙋 よくあるミス・注意点まとめ

ミスの内容解説
ifに()を付けるif (x > 5)Rustでは () は不要。if x > 5 と書く
matchで網羅漏れmatch x { 1 => ... }_でその他をカバーしないとエラー
loopの無限ループloop { println!("test"); }breakを入れないと止まらない

✅ Rustはコンパイル時のエラーメッセージが親切なので、内容をよく読んで対応しましょう!


📝 まとめ:Rustの制御構文は柔軟で安全!

今回の学びをまとめましょう。

  • ifは直感的で式としても使える
  • matchは強力なパターンマッチ構文で、特にOptionenumと相性抜群
  • forwhileloopを使い分けることで柔軟な反復処理が可能
  • breakcontinuereturnでループ制御を細かく行える

Rustは「安全であること」「明確であること」を重視しており、制御構文も例外ではありません。慣れてくると、より柔軟でエラーの少ないコードが書けるようになります。

次回は、Rust最大の特徴でもある「所有権(ownership)」「借用(borrowing)」「ライフタイム(lifetime)」について、やさしく解説していきます!


🔗 参考リンク・補足情報

Rustの制御構文は、実行速度や安全性を犠牲にせずに複雑な処理を記述するための強力な武器です。この知識を武器に、より実践的なプログラムにチャレンジしていきましょう!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です