本文へスキップ
BecomeCoder

Rustコース · 第2章 制御構文と関数 · レッスン7

if は式 ― 条件分岐

ブラウザで完結

導入

条件で処理を分けるのが if です。Rust の ifなので、その結果を変数に代入できます。三項演算子? :)が Rust にないのは、if 自体が値を返せるからです。

説明

fn main() {
    let n = 7;

    if n % 2 == 0 {
        println!("偶数");
    } else if n % 3 == 0 {
        println!("3の倍数");
    } else {
        println!("その他");
    }

    // if は式。結果を変数に代入できる
    let label = if n % 2 == 0 { "偶数" } else { "奇数" };
    println!("{n} は {label}");
}
  • 条件式に丸カッコは不要if (n > 0) ではなく if n > 0)。一方、ブロックの { } は必須です。
  • 条件は必ず bool 型でなければなりません。C言語のように「0以外を真」とは扱いません。if n { ... }n が整数)はエラーです。
  • let label = if ... { "偶数" } else { "奇数" };if が値を返すので代入できます。このとき、if 側と else 側の型は揃っている必要があります。

条件が bool に限定されているおかげで、「代入 = と比較 == を書き間違えて意図せず真になる」といった典型的なバグが起きません。

試すには

let label = if n % 2 == 0 { "偶数" } else { 0 }; のように if 側と else 側で型を変えると、「型が一致しない」とコンパイルエラーになります。式として値を返す以上、両方の型が揃う必要があるわけです。

実際に動かしてみよう

下のエディタにRustを書いて「実行」を押すと、学習用シミュレータが println! の出力を表示します(本物のrustcではなく、教材の範囲を再現した軽量エンジンです)。struct・enum・match・トレイト・Vec/String/HashMap・Option/Result なども動きます。本文の例を書き換えて動かしてみましょう(所有権・借用チェッカーのコンパイルエラーは再現しないため、動きの確認用として使ってください)。

Rust — ブラウザ内で実行(学習用シミュレータ)

Rustの教材サブセットを動かす学習用シミュレータを読み込みます(本物のrustcではなく、動きを再現した軽量な自作エンジンです)。
スクロールして表示された時点でも自動で読み込まれます。