Menu
Coddy logo textTech

match 文

CoddyのRustジャーニー「Fundamentals」セクションの一部 — レッスン 26/75。

match式を使用すると、値を一連のパターンと比較し、どのパターンが一致したかに基づいてコードを実行することができます。

match式の基本構造は次の通りです:

match variable {
	pattern1 => expression1,
	pattern2 => expression2,
	// ... その他のパターン
	_ => default_expression,
}

matchキーワードの後には、テストしたい値が続きます。

matchの各アームは、パターン、それに続く =>、および実行するコードで構成されます。

アンダースコア _ は、他のパターンに一致しないあらゆるものに一致するデフォルトのケースです。

以下に例を示します:

let day = 3;
let day_name = match day {
	1 => "Monday",
	2 => "Tuesday",
	3 => "Wednesday",
	// ... その他のパターン,
	_ => "Invalid day",
};

アーム内で複数行のコードを使用する場合は、ブロックを使用します:

let day = 3;
let day_name = match day {
	1 => {
		println!("First day of the week!");
		"Monday"
	},
	2 => "Tuesday",
	// ... その他のケース
	_ => "Invalid day",
};

| を使用して、複数のパターンにマッチさせることができます:

let day = 3;
let day_type = match day {
	1 | 2 | 3 | 4 | 5 => "Weekday",
	6 | 7 => "Weekend",
	_ => "Invalid day",
};

Rustのmatch式は網羅的(exhaustive)である必要があります。つまり、すべての可能な値をカバーしていなければなりません。コンパイラがこれをチェックしてくれます。

challenge icon

チャレンジ

初心者

月の番号(1月なら1、2月なら2など)を受け取り、それが属する季節を表示するプログラムを作成してください。ロジックには match 文を使用してください。

季節とそれに対応する月は以下の通りです:

  • Winter: 12月 (12)、1月 (1)、2月 (2)
  • Spring: 3月 (3)、4月 (4)、5月 (5)
  • Summer: 6月 (6)、7月 (7)、8月 (8)
  • Autumn: 9月 (9)、10月 (10)、11月 (11)

チートシート

match 式は、値をパターンと比較し、どのパターンが一致したかに基づいてコードを実行します:

match variable {
    pattern1 => expression1,
    pattern2 => expression2,
    _ => default_expression,
}

基本的な例:

let day = 3;
let day_name = match day {
    1 => "Monday",
    2 => "Tuesday",
    3 => "Wednesday",
    _ => "Invalid day",
};

アーム内で複数行のコードを記述する場合は、ブロックを使用します:

let day = 3;
let day_name = match day {
    1 => {
        println!("First day of the week!");
        "Monday"
    },
    2 => "Tuesday",
    _ => "Invalid day",
};

| を使用して複数のパターンに一致させます:

let day = 3;
let day_type = match day {
    1 | 2 | 3 | 4 | 5 => "Weekday",
    6 | 7 => "Weekend",
    _ => "Invalid day",
};

match 式は網羅的(exhaustive)である必要があります。つまり、すべての可能な値をカバーしなければなりません。アンダースコア _ は、他のパターンに一致しないすべてのものに一致するデフォルトのケースです。

自分で試してみよう

use std::io;

fn main() {
    let mut input = String::new();
    io::stdin().read_line(&mut input).unwrap();
    let month: i32 = input.trim().parse().unwrap();
    // 以下にコードを記述してください
    let season = 

    // 以下の行は変更しないでください
    println!("status = {}", season);
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

Fundamentalsのすべてのレッスン