interfaceの使い道

 昨日の続き。

 そういや自分で言っといて忘れてたけど言語内言語の文法定義に使える。同じオブジェクトにさまざまなinterfaceを実装して遷移させ、インデントはラムダ式を使うとシンプルに書ける。

 interfaceをユーザーに実装させるために提供するという道はクロージャによって既に断たれた。デフォルト実装が作れないような場合はクロージャを入れさせるべきだ。

 interfaceのメソッド/プロパティと同じ数のクロージャの群れでinterfaceは完全に代替が可能だが、いちいちクロージャを指定するのがつらいことになるような頻出する組み合わせは、ある程度interfaceなり抽象クラスなりにしてもいい。ただこのよく出てくる組み合わせというのが良く分からなくて、IListなんかは破綻しているように思う。ここを確実に正解となる形で抽象化するには、1インターフェース1メソッドにしてあらゆる組み合わせを事前に用意しておく、ということになりそうだがそれは人間に把握できる複雑さを超えるので不可能だ。オブジェクトのサイズも指数関数的に爆発していく。ダックタイピングおよびクロージャ指定連打ならそんな心配も無い。その処理には何のメソッドが必要なのか明示することでソースを分かりやすく出来るので、基本的にはクロージャをいちいち指定してやるのがいいだろう。