Rust 速習チュートリアル

Rust のmatch

1. match

選択肢が多い場合、match を使用すると大量の if...else を記述するよりも簡潔になります。
match は、実行する複数のコードブロックの中から1つを選択するために使用されます。

例:

fn main() {
  let day = 4;

  match day {
    1 => println!("月曜日"),
    2 => println!("火曜日"),
    3 => println!("水曜日"),
    4 => println!("木曜日"),
    5 => println!("金曜日"),
    6 => println!("土曜日"),
    7 => println!("日曜日"),
    _ => println!("無効な曜日です。"),
  }
}

2. コードの解説

  • match の対象となる変数(day)は1度だけ評価されます。
  • day 変数の値が、各「ブランチ(枝)」の値と比較されます。
  • 各ブランチは値で始まり、その後に => と結果が続きます。
  • 一致(マッチ)するものがあれば、関連付けられたコードブロックが実行されます。
  • _ は、一致するものがない場合に実行されるコードを指定するために使用されます(他の言語における default のような役割です)。
  • 上記の例では、day の値は 4 なので、「木曜日」がプリントされます。

3. 複数のマッチ (Multiple Matches)

| オペレータ(OR)を使用すると、一度に複数の値にマッチさせることができます。

例:

fn main() {
  let day = 6;

  match day {
    1 | 2 | 3 | 4 | 5 => println!("平日"),
    6 | 7 => println!("週末"),
    _ => println!("無効な曜日"),
  }
}

4. 戻り値を持つmatch (match with a Return Value)

if と同様に、match も値を返す(リターンする)ことができます。
これは、マッチの結果を直接変数に保存できることを意味します。

例:

fn main() {
  let day = 4;

  let result = match day {
    1 => "月曜日",
    2 => "火曜日",
    3 => "水曜日",
    4 => "木曜日",
    5 => "金曜日",
    6 => "土曜日",
    7 => "日曜日",
    _ => "無効な曜日です。",
  };

  println!("{}", result);
}
注意:if...else の場合と同様に、match の各ブランチが返す値は、すべて同じ型(Type)である必要があります。