【ぱたーんまっちんぐ】

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

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

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

📌 このページのポイント
パターン照合:形と中身を見る 入力 Some(5)5Some(n)n = 5 を取り出すn + 1 の処理Some(6)今回の結果None の分岐None今回は通らないRustのmatchは、全ケースを扱う
左上の箱はSomeが値を持つことのたとえで、メモリ配置ではありません。RustのOptionを使う例です。入力が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は「照合」のこと。値や構造を表すパターンと、対象のデータを照らし合わせるんだ。

参考資料

← 用語集にもどる