ダックタイピング

http://ja.wikipedia.org/wiki/%E3%83%80%E3%83%83%E3%82%AF%E3%83%BB%E3%82%BF%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0
昨日初めて知った単語ですね。
なるほど、例えばそれらのインスタンスが必ずsay()というメソッドを持っているのなら、それらは共通のインターフェースをimplmentsする必要がなく、インターフェースを書く手間を省けるという考え。
 
んー、これ利点あるんですかね?
確かに静的型付けで書いていて、面倒と思うタイミングはあるにはあります。
でも、インターフェースってコメントみたいなもんなんですよね。
インターフェースによって実装を強制することにより、その実装の意図を他人や未来の自分に説明するためのものだと思うのです。
 
ダックタイピングでクラスを沢山作って、誰かに引き継いだ時。
どうせ「say()ってメソッドが必須ね」と説明する必要があるわけでしょう?
コメントとか、仕様書で。
しかもそのメソッドが複数にわたっていて、デフォルト引数とかまで使っていたら最悪じゃないですかー!やだー!
 
(楽な)プログラムは、いかに実装を抽象化し、そこから外れたコードの混入を防ぐために縛るかだと思うので、今のところ動的の利点は見つけられないなぁ。
テキストぺらっと1枚分のスクリプトとかだったら、良いのかもしれませんが。