2015年2月22日

CLOSを使った感想

defmethodと組み合わせると多態性が表現できて素晴らしい
いまのところ継承とか登場しないから快適
多態性のみ利用できるので素晴らしい


make-instance 〜〜って言うのがイチイチ面倒だからインスタンス生成の補助関数が必須か
って言うかいわゆるメンバ変数の参照が本当に面倒だ
いわゆるメンバ関数の呼び出しもグローバルな関数呼び出しだから
オブジェクト->メンバ
的な呼び出し方ができるといいのに
リードマクロでやるなら
(#@インスタンス->アクセサ)
とかになるんでしょうか
幸いCommon Lisp使っているので、マクロでなんとかできないもんかね
普通の人(OOPは実装の継承とカプセル化がすべてだと思っている、世の多数派のこと)がCLOSのdefclassとdefmethod見たらなんじゃこりゃって思うだろうな
Common Lispでカプセル化だったら高階関数使ったほうが圧倒的に便利だろうし


CLOSで多態させたときのデバッグと言うかどのdefmethodが呼ばれてエラーになっているか分かりづらかった印象がある
これはCLISPのデバッガの使い方がイマイチわかっていないところが大きな原因だと思うけど



まあでも不満点はIDE的なサポートがあれば別にどうってことないような
インスタンスから呼び出せるdefmethodリストも列挙するのは簡単だろうし
VC++のように背後でコンパイラが動きまくってdefmethodされているオブジェクトのテーブルでも作っていま記述しているインスタンスから呼び出されるであろう関数のリストを作るのは容易にできそう


defmethodのいいところは、特定のクラスで判別して呼び出す関数を振り分けられるのと合わせてhaskellのガードのotherwise的なその他を設定できるところだな
この動作は素晴らしいとしか言いようがないです
c#では真似のできない芸当、本当に素晴らしい
defmethod作った人は本当に頭がいい人なんだろうなと思う