複数の値とのマッチング
CoddyのRustジャーニー「Logic & Flow」セクションの一部 — レッスン 2/66。
時には、すべて同じコードをトリガーする必要がある複数の異なる値をマッチさせたい場合があります。各値に対して個別のパターン(アーム)を書く代わりに、Rustでは、| (OR) 演算子を使用して、複数のパターンを1つのアームに組み合わせることができます。
1つのアームで複数の値をマッチさせる方法は次のとおりです:
let month = 12;
match month {
12 | 1 | 2 => println!("Winter"),
3 | 4 | 5 => println!("Spring"),
6 | 7 | 8 => println!("Summer"),
9 | 10 | 11 => println!("Fall"),
_ => println!("Invalid month"),
}| 演算子は、英語の「OR」のように機能します。値が | で区切られたパターンのいずれかに一致する場合、そのアームが実行されます。これにより、すべて同じ処理を行う個別のアームを複数用意するよりも、コードがはるかにすっきりします。
チャレンジ
簡単入力として、曜日を表す日の番号(1-7)を受け取ります。入力を読み取り、整数に変換し、match 式と | 演算子を使用して、それが平日か週末かを出力してください。
要件:
- 日が
1、2、3、4、または5の場合は、"Weekday"と出力してください。 - 日が
6または7の場合は、"Weekend"と出力してください。 - それ以外の数値の場合は、
"Invalid day"と出力してください。
入力: 日の番号を表す単一の整数
出力: "Weekday"、"Weekend"、または "Invalid day" のいずれかを出力してください。
チートシート
| (OR) 演算子を使用すると、1つのマッチアームで複数のパターンを組み合わせることができます。値が | で区切られたパターンのいずれかに一致する場合、そのアームが実行されます。
let month = 12;
match month {
12 | 1 | 2 => println!("Winter"),
3 | 4 | 5 => println!("Spring"),
6 | 7 | 8 => println!("Summer"),
9 | 10 | 11 => println!("Fall"),
_ => println!("Invalid month"),
}自分で試してみよう
use std::io;
fn main() {
// 入力を読み込む
let mut input = String::new();
io::stdin().read_line(&mut input).expect("Failed to read line");
let day: i32 = input.trim().parse().expect("Please enter a number");
// TODO: 以下に | 演算子を使用した match 式を使ってコードを記述してください
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。