代数的データ型
足し算や掛け算ができる型のこと。Algebraic data type、ADT。
嬉しいこと
型を使うと、ありえない状態を防ぎ、事前に検査ができる
代数的データ型を使うと、型の組み合わせが可能になる
より柔軟かつ厳密な表現ができる
種類
積(AND)
直積型
複数の型の値を同時に保持する
値のパターンが掛け算で増える=直積
ex. オブジェクト、クラス、構造体、タプル
和(OR)
列挙型
複数の選択肢のうちのいずれか1つを保持する=列挙
ただし要素に直積型は取らない
ex. enum、union
直和型
直積型を持つことができる列挙型
ケースごとに違う構造(直積型)を持つことができるので表現力が強い
継承(サブクラス)も似ているが、クラスがオープンだと勝手にサブクラスを追加できる
要素が確定しないので、直和型ではない
Sealed Classは親クラスが子クラスを決められるので、直和型になる
応用例
UIの状態表現
Result型:成功か失敗かを表す直和型。Eitherも同じ。
参考資料
https://en.wikipedia.org/wiki/Algebraic_data_type
https://nowokay.hatenablog.com/entry/2021/10/14/211326
https://speakerdeck.com/kajitack/why-algebraic-data-type