Life is Really Short, Have Your Life!!

ござ先輩の主に技術的なメモ

ダック・タイピングのメモ

ダック・タイピング - Wikipedia

Javaのようにjava.lang.Objectがすべての親になっており、必ず階層を必要とする考えで型を決定する場合は、その階層構造から型を決定することが出来るという話らしい。どの階層構造に属しているか否かで型の判別ができます、と。

これに対し動的言語(RubyPython等)は、階層構造は気にせず要求さえ満たせれば良いと。アヒルのように歩き鳴くならそれもうアヒルだよね、っていう考えだって。在庫があり品番があればそれは商品だみたいな感じだ。中古品かもしれんし不良品かもしれないけど、みたいな。

信じるに値する要求を満たせるんだから、それでいいじゃんって感じかな。

上記Wikipediaにのってるサンプルコード

 def test(foo)
   puts foo.sound
 end
 
 class Duck
   def sound
     'quack'
   end
 end
 
 class Cat
   def sound
     'myaa'
   end
 end
 
 test(Duck.new)
 test(Cat.new)

うーむ。なるほど。階層で決定できないなら、使ってみるしかないわけだ。

http://blog.sugulab.com/wp-content/uploads/2010/04/7835a2cd144833ea1b508c44a1a72cba.jpg