ファンクタとは?
ふぁんくた
ファンクタとは、関数を適用する操作を文脈や構造を保ったまま内部の値に持ち上げることができる、関数型プログラミングの抽象的な型クラスです。
ファンクタ(Functor)は、圏論に由来する概念で、プログラミングにおいては「中身の値に関数を適用できるコンテナ」として理解されます。型クラスとして定義され、型 F がファンクタであるためには、map 関数(Haskellでは fmap)が定義できる必要があります。
ファンクタが満たすべき法則(ファンクタ則)は二つあります。
- 恒等則:fmap id = id(恒等関数でマップしても変化なし)
- 合成則:fmap (f . g) = fmap f . fmap g(合成してからマップするか、順にマップするか、結果は同じ)
日常的なプログラミングでファンクタとして扱われる型には次のようなものがあります。
- リスト(List):各要素に関数を適用する map 操作そのもの
- Maybe / Optional:値がある場合のみ関数を適用し、ない場合はそのまま Nothing / None を返す
- Either / Result:成功値側にのみ関数を適用し、エラーを伝播させる
- Promise / Future:非同期処理の結果に対して then で関数を連鎖させる
ファンクタはモナドやアプリカティブファンクタの基礎概念でもあり、これらを段階的に学ぶ上での出発点として位置づけられています。Haskell・Scala・F#・Rustなど多くの関数型言語で直接サポートされています。
使い方・例文
JavaScriptの配列の map メソッドはファンクタの典型例で、[1, 2, 3].map(x => x * 2) のように、配列という文脈を保ちながら各要素に関数を適用できます。
この用語をシェア
最終更新: