Duck Typingだガー。

Ruby関連のサイトを見ていると、Duck Typingという聞き慣れたい言葉が。
「アヒルのように歩き,アヒルのように鳴くものはアヒルに違いない」という西洋の格言が由来で、つまり私が愛してやまない実家に預けてある猫ちゃんも、ガーと鳴けばアヒルと見なされるということで、つまりこういうことらしい。

class Duck
  def say_gaaa
    p "gaa"
  end
end

class Cat
  def say_gaaa
    p "nyaaa"
  end
end

def use_say_gaaa(obj)
  obj.say_gaaa
end

duck = Duck.new
cat = Cat.new

use_say_gaaa(duck)
use_say_gaaa(cat)

結果。

"gaa"
"nyaaa"

処理を行うに当たって、該当のオブジェクトがどのクラスのインタンスかではなく、どういうメソッドを持っているか、ということに重点を置く、ということでしょうか。
ウオー、これは便利そうだ。こういう処理をC#とかでやるとクラスを用意して、そのクラスをそれぞれで継承して、なんてやっているので、とても魅力的に映る。