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)である必要があります。つまり、すべての可能な値をカバーしていなければなりません。コンパイラがこれをチェックしてくれます。
チャレンジ
初心者月の番号(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);
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。