パターンマッチング
値を構造的なパターンに照らして分解し、一致させる言語機能。ML 系(OCaml、Haskell)では1970年代から標準だ。
近年は Rust、Scala、Swift、Java 21以降、Python 3.10以降(match 文)に広まった。Rust では match opt { Some(x) => x * 2, None => 0 }、Java 21 では switch (obj) { case Integer i -> ..., case String s when s.length() > 10 -> ... } と書く。分解、分岐、網羅性チェックを一度に行えるのが強みだ。
テキストのパターンを扱う正規表現や、値の等価性だけを見る switch-case とは別物である。代償は、強力な構文ゆえの学習コストだ。オブジェクト指向の Visitor パターンに代わる現代的な手段でもある。代数的データ型(直和型)とパターンマッチングを組み合わせると、「不正な状態を表現できなくする」という定石が成り立つ。