Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

Rust辞典

if / else / if let

Rustの『if』は式(expression)であり、値を返すことができます。『if let』はOptionやResultのパターンマッチを簡潔に書くための構文です。

構文
// 通常のif/else
if 条件 {
    // 処理
} else if 条件2 {
    // 処理
} else {
    // 処理
}

// 式として使用(値を返します)
let 変数 = if 条件 { 値1 } else { 値2 };

// if let(パターンマッチ分岐)
if let パターン = 値 {
    // マッチした場合の処理
} else {
    // マッチしなかった場合の処理
}
if / if let 比較一覧
構文概要
if 条件bool値を評価する通常の条件分岐です。
else if 条件複数条件を連鎖させます。
let x = if ... { } else { }ifを式として使い、変数に値を代入します。各分岐の型を揃える必要があります。
if let Some(x) = optOptionがSomeのときだけ処理します。matchより簡潔に書けます。
if let Ok(x) = resultResultがOkのときだけ処理します。
サンプルコード
fn classify(n: i32) -> &'static str {
    if n > 0 {
        "正の数"
    } else if n < 0 {
        "負の数"
    } else {
        "ゼロ"
    }
}

fn main() {
    // 基本的なif/else
    let score = 75;
    let grade = if score >= 80 {
        "優"
    } else if score >= 60 {
        "良"
    } else {
        "可"
    };
    println!("成績: {}", grade); // 『良』と出力されます。

    // if letでOptionを処理します。
    let some_value: Option<i32> = Some(42);
    if let Some(v) = some_value {
        println!("値は{}です", v); // 『42』と出力されます。
    } else {
        println!("値がありません");
    }

    // if letでResultを処理します。
    let result: Result<i32, &str> = Ok(100);
    if let Ok(n) = result {
        println!("成功: {}", n);
    }

    println!("{}", classify(5));
    println!("{}", classify(-3));
}
概要

Rustのifは文ではなく式のため、三項演算子の代わりに使えます。各分岐の戻り値は同じ型でなければならず、型が一致しない場合はコンパイルエラーになります。

『if let』はOptionやResultのパターンを1つだけ処理したい場合に便利です。複数のパターンを処理する場合は『match』のほうが明確で読みやすくなります。詳細はmatch / パターンマッチを参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。