先日、Duck Typing というエントリで紹介したDuck Typingについてさらに有力な情報が日経Linuxの2005/08号に載っていた。
「まつもと直伝 プログラミングのオキテ」のテーマがまさに「Duck Typingが生まれるまで」。
ということで、日経BPの記事検索サービスでPDFを購入してみた。(いつも思うが、もう少し安くならないものなのか・・・)
記事によると、Duck Typingとは、
If it walks like a duck and quacks like a duck, it must be a duck.
(アヒルのように歩き、アヒルのように鳴くものはアヒルに違いない)
が元であり、"達人プログラマー"の著者・Dave Thomasが言い出したらしい。
Duck Typingに関するポイントになりそうなのはこの辺りだろうか。
静的型は、プログラム開発者が型宣言としてたくさんの情報を提供するために、エラーの検出が早く、確実に実行できます。そのかわり、型を設計した時点の前提が変化すると、指定したたくさんの情報(型)を一貫性を保ちながらすべて更新しなければなりません。動的型は、最初からそのような指定を行っていませんから、変化に強い傾向があります。
では、動的型の言語でDuck Typingを実践するにはどのような指針に従えばよいのでしょうか。基本的な原則はたった一つ、最低限これだけを覚えておけば大丈夫です。
- 明示的な型チェックを避ける
たしかに、Duck Typingの特長を考えると型チェックはしてはいけないのは自明だ。Rubyを使っていると、自然とDuck Typing的な書き方になっているようにも思う。
※ あ、そうそう元記事の中には誤植(?)が一つ。図8のメソッドによる型チェックの例は、obj.kind_of?("to_str") でなくて、obj.respond_to?("to_str") ですね。