範囲とのマッチング
CoddyのRustジャーニー「Logic & Flow」セクションの一部 — レッスン 3/66。
値が特定の数値範囲内にあるかどうかを確認する必要がある場合、個々の値に対して別々のアームを記述するのは面倒です。Rustのmatch式は、start..=end構文を使用して連続した値の範囲に対してマッチングを行える範囲パターンをサポートしています。
..= 演算子は 含み範囲(inclusive range) を作成します。これは、開始値と終了値の両方がマッチに含まれることを意味します。match アームで範囲を使用する方法は次のとおりです:
let temp = 22;
match temp {
..=0 => println!("Freezing"),
1..=15 => println!("Cold"),
_ => println!("Warm"),
}この例では、22という温度は最初の2つの範囲に一致しないため、ワイルドカードのアームにフォールスルーし、"Warm"と出力します。範囲1..=15は1と15の両方を含むため、1から15までのどの温度でも"Cold"と出力されます。
チャレンジ
簡単入力として年齢を受け取ります。入力を読み込み、整数に変換し、範囲パターンを持つ match 式を使用して、適切な年齢カテゴリを出力してください。
要件:
- 年齢が
0..=12の場合は、"Child"と出力してください - 年齢が
13..=19の場合は、"Teenager"と出力してください - 年齢が
20..=64の場合は、"Adult"と出力してください - 年齢が
65..=120の場合は、"Senior"と出力してください - それ以外の年齢の場合は、
"Invalid age"と出力してください
入力: 年齢を表す単一の整数
出力: 年齢カテゴリを出力してください: "Child", "Teenager", "Adult", "Senior", または "Invalid age"
自分で試してみよう
use std::io;
fn main() {
// 入力を読み込む
let mut input = String::new();
io::stdin().read_line(&mut input).expect("Failed to read line");
let age: i32 = input.trim().parse().expect("Please enter a valid number");
// TODO: 範囲パターンを用いた match 式を使用して、以下にコードを記述してください
// 結果を出力する
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。