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)である必要があります。