2009年4月9日 星期四

Ruby語言的Duck Typing

Ruby的Duck Typing有點類似物件導向的多型,但差別在於多型要透過繼承才能實現,Duck Typing則不用。至於什麼是Duck Typing,可以用一句話來講:「如果牠走路像鴨子,叫聲也像鴨子,那牠就是隻鴨子!」。



以往程式要物件做什麼時,都會先檢查型別,例如下面的程式碼(C#):

2009-04-09_024800

2009-04-09_024820

 

當呼叫Test這個函式時,一定得檢查引數p是否為Parent或其衍生類別,但是在Ruby中,變數是沒有型別的,丟進來的到底是什麼也不知道。現在用Ruby寫一段類似的程式碼:

2009-04-09_025541

上面的程式碼中,宣告了三個類別,其中TestClass跟TestClass2都有相同的函式叫test,但是這兩個類別並沒有繼承的關係。而TestContainer裡面的classtest就是用來測試這兩個類別,測試的程式碼如下:

2009-04-09_025747

執行之後會分別印出test跟test2,在執行container.classtest時,直譯器不檢查型別,只管有沒有一個叫test的函式,有的話就執行它。

以上就是Ruby的Duck Typing,Ruby是一個非常有趣的語言,身為程式設計師,不玩玩這類直譯式語言就太可惜了!

4 則留言:

  1. 我看不懂...O_Q
    話說,要跳入程式設計師的門檻會不會很高啊??

    回覆刪除
  2. 感覺不會耶,你看教主是學歷史的,結果現在在當工程師~~

    回覆刪除
  3. 耶~你沒講我都忘記了
    只記得教主很糟糕這件事而已...

    回覆刪除
  4. @Sen:

    別以為我只會糟糕而已!話說,跳入這一行很簡單,但是要混得還不錯是件挺麻煩的事啊。

    回覆刪除

 

我們搬家了

新部落格在http://b-plurkers.com/