TL;DR
- Clojure はプロトコル(Protocols)とデータ型(Datatypes)で、Java のインタフェースやクラスを書かずに抽象化と実装を実現する。
- プロトコルはインタフェースと違い、既にある型に元のコードを触らずに後付けできるので、Expression Problem を回避できる。
- データ型は
deftype、マップとして扱えるdefrecord、無名のreifyで作る。
内容
Clojure では、プロトコルがインタフェースの代わりに多重メソッドディスパッチを可能にし、データ型がクラスの代わりにプロトコルやインタフェースによる抽象化を実装する。新しい抽象化を定義してそれを実装する新しいデータ型を書くことも、既にあるデータ型に新しい抽象化を後付けすることもできる。各節のまとめは次のページにある。
- Programming Clojure, Third Edition 第7章 抽象化へ向けたプログラミング
- Programming Clojure, Third Edition 第7章 インタフェース
- Programming Clojure, Third Edition 第7章 プロトコル
- Programming Clojure, Third Edition 第7章 データ型
- Programming Clojure, Third Edition 第7章 レコード
- Programming Clojure, Third Edition 第7章 reify