Rubyのインスタンスにとっては見るものすべてduck

duckタイピングってrubyさわったことあるひとにはなんだかかっこよくて、いつかはduckタイピングしたいよね、なんて僕も思ってたわけなんですが、よくよく考えるとrubyって型チェックなしなんで、あるインスタンスにしてみたら、受け取るメッセージってインスタンス変数のセッターにしろ、メソッドの引数にしろ全部duckで、鳴かせてみるまでそいつが何者なのかわからないといった状況だったわけか。

とすると、あるインスタンスAが、その引数やインスタンス変数に色んな種類のメッセージ(メソッド)を下手に送れば送るほど、そのduckが満たすべき役割が増えていってしまうし、クラスAがduckについて知っていることが増えていく=依存が強くなるので、極力duckには鳴かさないほうがいいってことか。

なので鳴かす場合はHowじゃなくてWhatを答えてもらうような鳴かせ方をして、必要な処理を一発でしてもらうようにすればいいか。

オブジェクト指向的に、メッセージ(メソッド)を送るときは、「どうやって処理結果を得るか(How)」をこまかく指示するのではなく、「何の結果がほしいのか」だけ伝えて、細かい処理はメッセージ受信側に任せたほうがいいそうです。

参考:

www.amazon.co.jp