1最小の match
enum の3つのバリアントを match で出し分ける最小例です。全バリアントを書いているのでコンパイラの網羅性チェックが働き、Signal に新色を足すとこの match がエラーになって修正箇所を教えてくれます。match の各腕が値(ここでは &str)を返す「式」である点も確認してください。
Rust
2match は式 — 数値をレンジで分類する
match の対象は enum だけでなく数値も可能で、0 のようなリテラルや 1..=9 のようなレンジもパターンになります。match 全体が式なので、結果をそのまま let で変数に受け取れます。すべての整数は列挙しきれないため、_ で「それ以外」を受け止めるのが必須になる例でもあります。
Rust
3バリアントの中のデータを取り出す
前のレッスンで「持たせる」だけだったバリアントのデータを、match で取り出す例です。Event::Click(x, y) と書くと、中の2つの値がその名前の変数に束縛されて腕の中で使えます。GUI やゲームのイベント処理は、まさにこの「種類で分岐しつつ中身を取り出す」形で書かれます。
Rust
4| で複数パターンをまとめる
「土か日なら休日」のように、同じ処理をしたいパターンは | でまとめられます。match は文字列(&str)にも使え、どのリテラルにも一致しない入力は _ が受け止めます。複数の入力値を同じ分岐に落とす整理は、コマンドの別名処理など実務でもよく書く形です。
Rust
5APIレスポンスを match でさばく
「成功(本文つき)・未検出・サーバーエラー(コードつき)」という現実の API 応答を enum + match で処理する実務寄りの例です。データを持つ腕と持たない腕が混在しても、match なら1つの構文で漏れなくさばけます。後のレッスンで学ぶ Result のエラー処理も、実はこれと同じ形をしています。
Rust