TL;DR

  • Clojure はプロトコル(Protocols)とデータ型(Datatypes)で、Java のインタフェースやクラスを書かずに抽象化と実装を実現する。
  • プロトコルはインタフェースと違い、既にある型に元のコードを触らずに後付けできるので、Expression Problem を回避できる。
  • データ型は deftype、マップとして扱える defrecord、無名の reify で作る。

内容

Clojure では、プロトコルがインタフェースの代わりに多重メソッドディスパッチを可能にし、データ型がクラスの代わりにプロトコルやインタフェースによる抽象化を実装する。新しい抽象化を定義してそれを実装する新しいデータ型を書くことも、既にあるデータ型に新しい抽象化を後付けすることもできる。各節のまとめは次のページにある。

キーワード