Smalltalk
和smalltalk一樣,Ruby也是動態純物件導向的語言。你不需要靜態指定資料類型,所有東西都是對象。而且,兩者都有垃圾收集機制。
在Smalltalk中,流程式控制制語句也都是通過給對象發送訊息來完成的,但有時候這使得程式難以閱讀理解。而Ruby中的控制流程程結構就顯得保守一些,而且也就自然、容易理解一些。
說實話,Smalltalk為何物,我一無所知。以上廢話全摘自Ruby作者之文。
Perl
Ruby和其它兩種P姓語言:Perl和Python都被分類為指令碼語言(scripting language)。原因有三:
1.它們都支援快速開發週期(編輯-運行-編輯),不需要編譯。
2.它們為了提高你的效率,盡量減少你的代碼數量,比如,你不需要定義類型,至少省了敲好幾個鍵。
3.很多很強的內建庫支援對文本,檔案,網路的操作。
也許,因為是指令碼語言,很多人認為速度慢,不能使用在大型項目中。然而,也許對csh這樣的來說是吧,但是,對於Ruby以及Perl等來說,卻不太適合了。也許,稱Ruby為“動態物件導向語言”比“指令碼語言更合適”。
不像Perl,Ruby是完完全全的物件導向語言,OO不是裝飾品。Ruby用的$,@,%等符號比較少,這些符號對於螢幕小眼近視的我來說很容易混。Ruby沒有太多的對上下文環境的依賴,很少的隱式轉換。
比如,取得一個字串或者數組的長度方法如下:
Ruby:
a = "abc" a.length # => 3 a = [1,2,3] a.length # => 3 |
非常簡單,而在Perl中,則麻煩一些:
$a = "abc"; length($a); # => 3, it's OK @a = (1,2,3); length(@a); # => 1, not as expected scalar(@a); # => 3, $a = [1,2,3]; # length($a); # => 16, not as expected scalar(@$a); # => 3 |
在Ruby中很多的Perl函數都被封裝成類庫了,所以有時候Ruby程式看起來也像簡單的Perl程式。Ruby繼承了Perl的很多優點,當然沒有把那些煩人的東西也引入,所以,如果你熟悉Perl,也許有會喜歡Ruby。
Python
下面不糾纏Perl了,來說說Python。
先來說說抱怨聲:為什麼非要用縮排來確定代碼結構,有了list還要tuple幹什嗎?為什麼所有的value都不是執行個體?等等問題在Ruby中可以不必煩惱了,Ruby的目的是使程式比Python的短小精練。
來看的一個問題就是誰更物件導向,在Ruby中,取得字串的長度如下:
irb(main):010:0> a="1234" => "1234" irb(main):011:0> a.length => 4 irb(main):012:0> |
而在Python中,則要更面向過程一些了:
現在我對Python不太熟悉,不好總結,等等過些日子再更新。