【ぱたーんまっちんぐ】

パターンマッチング とは?

最終更新:
💡 値や形を照合して処理を選ぶ

値やデータの構造をパターンと照合し、一致した分岐の処理を実行する仕組み。構造を分解して中身を変数に取り出すこともできる。構文や網羅性チェックは言語によって異なる。

📌 このページのポイント
Rust:形に一致して中身を取り出す 入力の値Some(5)Some(n) に一致n = 5 を取り出すn + 1結果を返すSome(6)None の分岐今回は通らないmatchにはSomeとNoneの両方を用意
Optionの値に1を足す例。Some(5)から5を取り出します。入力がNoneなら、別の分岐でNoneを返します。
ひよこ ひよこ
if文と何が違うの?
ペンギン先生 ペンギン先生
if文は条件の真偽で分岐するよ。パターンマッチングは値や構造を照合し、一致した形の中身を取り出せる。Pythonなら座標の(0, y)というパターンで、xが0の点からyを取り出す、といった使い方ができるんだ。
ひよこ ひよこ
Rustではどんな例がある?
ペンギン先生 ペンギン先生
Optionという型の値をmatchで扱う例があるよ。Some(5)ならSome(n)の分岐でnに5を取り出して1を足し、Some(6)を返す。値がないNoneならNoneの分岐へ進むんだ。
ひよこ ひよこ
分岐を書き忘れたら教えてくれる?
ペンギン先生 ペンギン先生
Rustのmatchは網羅的である必要があるよ。Someの分岐だけでNoneを扱わなければコンパイルエラーになる。一方、Pythonのmatchは、一致するcaseがなければ何も実行せず次へ進む。どの言語でも同じ検査があるとは限らないんだ。
ひよこ ひよこ
形だけでなく条件も付けられる?
ペンギン先生 ペンギン先生
ガード条件を加えられるよ。Pythonならcase (x, y) if x == y:のように、座標を取り出したうえでxとyが同じか確認できる。ガードが偽なら、次のcaseを試すんだ。
ひよこ ひよこ
正規表現とは別のものなの?
ペンギン先生 ペンギン先生
正規表現は文字列の並びを専用の構文で照合するものだよ。ここでいうパターンマッチングは、数値などの値やタプル・列挙型などの構造を言語の構文で照合する。文字列の値を扱うこともあるので、単に「対象が違う」と覚えるより、何をどう照合するかを見るといいね。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「パターンマッチング」って出てきたら「データの形に合わせて処理を振り分ける仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「Pattern Matching」 = パターン照合
💬 Patternは「パターン」、Matchingは「照合」のこと。値や構造を表すパターンと、対象のデータを照らし合わせるんだ。

参考資料

← 用語集にもどる