📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

概要

Rustのif文は式 (expression) であり、値を返すことができる。
条件式は波括弧{}で囲まれたブロックで記述する。

条件式に括弧()を付ける必要はないが、条件式は必ずbool型でなければならない。


if式 / if-else式の条件分岐

条件式Aが成立するなら実行コードAが実行され、成立しないならば実行コードBが実行される。

 if 条件式A {
    実行コードA
 }
 else {
    実行コードB
 }


 fn main() {
    let hungry = true;
    if hungry {
       println!("I want to eat something!");
    }
    else {
       println!("I am full.");
    }
 }
 
 // 出力
 I want to eat something!


Rustのif式は値を返すことができるため、let文で変数に代入することができる。

 fn main() {
    let hungry = true;
    let message = if hungry {
       "I want to eat something!"
    }
    else {
       "I am full."
    };
    println!("{}", message);
 }
 
 // 出力
 I want to eat something!



else if式を使用した条件分岐

条件式Aが成立すれば実行コードA、成立していなければ条件式Bが検証され成立していれば実行コードB、いずれの条件も成立していなければ実行コードCが実行される。
検証したい条件が更に必要であれば、else if式を必要な分だけ記述する。

Rustにはswitch文の代わりにmatch式という強力なパターンマッチング機能がある。
複数の値を比較する場合は、match式の使用を推奨する。

 if 条件式A {
    実行コードA
 }
 else if 条件式B {
    実行コードB
 }
 else {
    実行コードC
 }


 fn main() {
    let code = "Swift";
    if code == "Python" {
       println!("I want to learn Django!");
    }
    else if code == "PHP" {
       println!("I want to learn WordPress!");
    }
    else if code == "Swift" {
       println!("I want to learn how to make iPhone apps.");
    }
    else {
       println!("I'm going out for a walk.");
    }
 }
 
 // 出力
 I want to learn how to make iPhone apps.



match式を使用した条件分岐

Rustでは、switch文の代わりに match 式を使用する。
match式は、全てのパターンを網羅する必要がある。
全てのパターンを列挙しない場合は、ワイルドカードパターン(_ : C/C++のdefault)を使用する。

 fn main() {
    let code = "Swift";
    match code {
       "Python" => println!("I want to learn Django!"),
       "PHP" => println!("I want to learn WordPress!"),
       "Swift" => println!("I want to learn how to make iPhone apps."),
       _ => println!("I'm going out for a walk."),
    }
 }
 
 // 出力
 I want to learn how to make iPhone apps.


match式も値を返すことができる。

 fn main() {
    let code = "Swift";
    let message = match code {
       "Python" => "I want to learn Django!",
       "PHP" => "I want to learn WordPress!",
       "Swift" => "I want to learn how to make iPhone apps.",
       _ => "I'm going out for a walk.",
    };
    println!("{}", message);
 }
 
 // 出力
 I want to learn how to make iPhone apps.


複数のパターンを同時にマッチさせる場合は、| 演算子を使用する。

 fn main() {
    let code = "Python";
    match code {
       "Python" | "Ruby" => println!("Script language!"),
       "C" | "C++" | "Rust" => println!("Systems programming language!"),
       _ => println!("Other language!"),
    }
 }
 
 // 出力
 Script language!


範囲を使用したパターンマッチも可能である。

 fn main() {
    let number = 13;
    match number {
       1..=10 => println!("1から10の範囲内"),
       11..=20 => println!("11から20の範囲内"),
       _ => println!("範囲外"),
    }
 }
 
 // 出力
 11から20の範囲内



if文の入れ子構造

条件の変数を2つ用意(複数条件)して、if式を入れ子構造で記述することができる。

Rustでは波括弧{}でブロックが明確に定義されているため、インデントは任意だが、可読性のために適切にインデントすることが推奨される。

 fn main() {
    let code = "Swift";
 
    if code == "Python" {
       println!("I want to learn Django!");
    }
    else {
       if code == "PHP" {
          println!("I want to learn WordPress!");
       }
       else {
          if code == "Swift" {
             println!("I want to learn how to make iPhone apps.");
          }
          else {
             println!("I'm going out for a walk.");
          }
       }
    }
 }
 
 // 出力
 I want to learn how to make iPhone apps.


ただし、入れ子構造が深くなる場合は、else if式を使用した方が可読性が高い。

 fn main() {
    let code = "Swift";
 
    if code == "Python" {
       println!("I want to learn Django!");
    }
    else if code == "PHP" {
       println!("I want to learn WordPress!");
    }
    else if code == "Swift" {
       println!("I want to learn how to make iPhone apps.");
    }
    else {
       println!("I'm going out for a walk.");
    }
 }
 
 // 出力
 I want to learn how to make iPhone apps.



論理演算子を使用した複数条件

複数の条件を組み合わせる場合は、論理演算子を使用する。

  • &&
    AND演算子 (両方の条件が真の場合に真)
  • ||
    OR演算子 (いずれかの条件が真の場合に真)
  • !
    NOT演算子 (条件を反転)
 fn main() {
    let hungry = true;
    let has_money = true;
 
    if hungry && has_money {
       println!("レストランに行きましょう!");
    }
    else if hungry && !has_money {
       println!("家で食事をしましょう。");
    }
    else {
       println!("まだ食事の時間ではありません。");
    }
 }
 
 // 出力
 レストランに行きましょう!


 fn main() {
    let age = 20;
    let has_license = true;
 
    if age >= 18 || has_license {
       println!("運転できます。");
    }
    else {
       println!("運転できません。");
    }
 }
 
 // 出力
 運転できます。



if let式による簡潔なパターンマッチ

Option型やResult型などの値を扱う場合、if let 式を使用すると簡潔に記述できる。

 fn main() {
    let some_value: Option<i32> = Some(10);
 
    if let Some(x) = some_value {
       println!("値は{}です", x);
    }
    else {
       println!("値はありません");
    }
 }
 
 // 出力
 値は10です


これは、以下に示すmatch式と同等である。

 fn main() {
    let some_value: Option<i32> = Some(10);
 
    match some_value {
       Some(x) => println!("値は{}です", x),
       None => println!("値はありません"),
    }
 }
 
 // 出力
 値は10です