'match' 式
CoddyのRustジャーニー「Logic & Flow」セクションの一部 — レッスン 1/66。
match式は、値をさまざまなパターンと比較し、どのパターンが一致したかに基づいてコードを実行できる、Rustの強力なパターンマッチングツールです。複数の条件をエレガントに処理できる、if文のより高度なバージョンと考えてください。
match 式の基本的な構文は以下の通りです:
match value {
pattern1 => code_to_run,
pattern2 => code_to_run,
_ => default_code,
}match内の各行は「アーム」と呼ばれます。=>は、パターンとそのパターンが一致したときに実行されるコードを区切ります。アンダースコア_は、あらゆるものに一致する特別なワイルドカードパターンです。これは、他のパターンに一致しないあらゆる値に対する「キャッチオール」のようなものです。
数値をチェックする簡単な例を次に示します:
let number = 2;
match number {
1 => println!("One"),
2 => println!("Two"),
_ => println!("Other"),
}Rustでは、match式は網羅的(exhaustive)である必要があります。つまり、考えられるすべての値を処理しなければならないということです。そのため、ワイルドカードの_は非常に重要です。これにより、明示的に一致しなかったすべてのケースを確実にカバーできます。
チャレンジ
簡単numを受け取り、その数値に基づいた文字列の説明を返す関数describe_numberを作成してください。
match式を使用して、異なる数値に対して異なる説明を返してください。
条件:
numが0の場合、"zero"を返しますnumが1の場合、"one"を返しますnumが2の場合、"two"を返しますnumが3の場合、"three"を返します- それ以外の数値の場合、
"many"を返します
パラメータ:
num(i32): 説明する数値
戻り値: 数値の文字列による説明 (String)
チートシート
match式は、値をさまざまなパターンと比較し、どのパターンが一致したかに基づいてコードを実行します:
match value {
pattern1 => code_to_run,
pattern2 => code_to_run,
_ => default_code,
}match内の各行は「アーム(arm)」と呼ばれます。=>は、パターンとそのパターンが一致したときに実行されるコードを区切ります。
例:
let number = 2;
match number {
1 => println!("One"),
2 => println!("Two"),
_ => println!("Other"),
}アンダースコア_は、他のパターンでカバーされていないあらゆるものに一致するワイルドカードパターンです。match式は網羅的(exhaustive)でなければなりません。つまり、考えられるすべての値を処理する必要があります。
自分で試してみよう
fn describe_number(num: i32) -> String {
// ここにコードを記述してください
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。