構造体、列挙型、トレイト

Rust Pattern Matching with match

Compare a value against values, ranges, tuples and guards, and let the compiler check you covered everything.

  • 中級
  • 約3分で読めます
  • 実行できるサンプル 1 件
学べること
  • match arms
  • Ranges, | and guards
  • if let
match n
0"zero"
1 | 2 | 3"small"
4..=9"medium"
_"large"

The first pattern that fits wins

match compares a value with a list of patterns and runs the first one that fits. Patterns can be single values, several values, ranges, tuples, or a name that catches everything else.

1 | 2 | 3 matches any of the three values and 4..=9 matches a range. n if n < 0 is a guard: the pattern matches only when the condition is true. _ catches everything that is left. if let is a short match for a single pattern.

重要なポイント

  1. 1 | 2 | 3 matches any of the three.
  2. 4..=9 matches a range.
  3. _ catches everything else.

実行できる Rust のサンプル

Rust
コードを実行 →
main.rs
fn classify(n: i32) -> &'static str {
    match n {
        0 => "zero",
        1 | 2 | 3 => "small",
        4..=9 => "medium",
        n if n < 0 => "negative",
        _ => "large",
    }
}

fn main() {
    for n in [0, 2, 7, -5, 42] {
        println!("{n}: {}", classify(n));
    }

    let point = (0, 8);
    match point {
        (0, y) => println!("on the y axis at {y}"),
        (x, 0) => println!("on the x axis at {x}"),
        (x, y) => println!("at ({x}, {y})"),
    }

    let maybe = Some(3);
    if let Some(value) = maybe {
        println!("got {value}");
    }
}
この例の実行ボタンを作成 実行結果
0: zero
2: small
7: medium
-5: negative
42: large
on the y axis at 8
got 3

練習

サンプルをオンラインコンパイラーで開き、値を変えたり行を追加したりして、実行する前に出力を予想してみましょう。次に、わざとコードを壊してコンパイラーのメッセージを読んでみてください。

このレッスンを終えましたか?

学習済みにすると進み具合を記録できます。

次へ: Temperature Converter →

チャレンジで練習する

このレッスンの内容を使って実際の問題を解きましょう。各チャレンジはブラウザで動き、すぐにテストされ、AI のレビューも受けられます。

すべてのチャレンジ