我愛Ruby的三十七個理由(1)

發表于:2007-06-11來源:作者:點擊數: 標簽:
我不打算浪費時間來談論Ruby的歷史,如果你沒有聽說過它,你可以去它的主頁看看www. ruby -lang.org ,或者去它的新聞組comp.lang.ruby。如果你知道Ruby,我將講述我為什么會喜愛它。 1.它是 面向對象 的 這表示什么意義呢?如果問10個 程序員 ,你也許會得

我不打算浪費時間來談論Ruby的歷史,如果你沒有聽說過它,你可以去它的主頁看看www.ruby-lang.org,或者去它的新聞組comp.lang.ruby。如果你知道Ruby,我將講述我為什么會喜愛它。

1.它是面向對象

這表示什么意義呢?如果問10個程序員,你也許會得到12種結果,你有你的看法,我不會試圖去改變你的看法。但是有一點,Ruby提供了對數據和方法的封裝,允許類的繼承,對象的多態。不像其它語言(C++,Perl等),Ruby從設計的時候開始就是一種面向對象的語言。

2.它是純面向對象的語言

難道是我多余?不是這樣的,之所以這么說,因為Ruby中一切都是對象,包括原始數據類型(primitive data types),比如字符串,整型,都表示的是一個對象,而不需要Java那樣提供包裝類(wrapper classes)。另外,甚至是常量,也會被當作對象來處理,所以一個方法的接收者,可以是一個數字常量。

3.它是動態語言

對于只熟悉像C++,Java這樣靜態語言的人來說,這是一個重大的概念上的差別。動態意味著方法和變量可以在運行時候添加和重定義。它減少了像C語言那樣的條件編譯(#ifdef),而且容易實現反射API(reflection API)。動態性使得程序能自我感知(self-aware),比如運行時類型信息,檢測丟失的方法,用來檢測增加方法的鉤子等。在這些方面Ruby和Lisp和Smalltalk都有一些關系。

4.它是一種解釋執行的語言

這是一個復雜的問題,值得重點解釋一下,也許這個特點會因為性能的原因而引起從優點變為缺點的爭論。對于此,我有幾點見解:(1)快速開發循環是一個巨大的好處,這要得益于Ruby的解釋執行。(2)多慢才叫慢呢?在說它慢之前先定一個慢的基準。(3)也許有人要批評我了,但我還要說:處理器每年都在變得原來越快。(4)如果你真的很在意你的速度,你可以用C開發一部分你的代碼。(5)最后,從某種意義上說,這是一個還在爭論中的問題,沒有一個語言天生就是解釋型的,世界上沒有哪個法律禁止開發一個Ruby編譯器出來。

5.它理解正則表達式

很多年之前,正則表達式只是用在UNIX的工具如grep或者sed中,或者在vi中進行一些一定的查找-替換等。Perl的出現解決了這些問題,而現在,Ruby同樣也能做到這些。越來越多的人認識到了這種字符串和文本處理技術的難以置信的能力,如果你對此表示懷疑,那么請去看一下 Jeffrey Friedl的書Mastering Regular Expressions,然后,你就應該不會有什么懷疑了。

6.它是多平臺的

Ruby可以運行在Linux,UNIX,Windows,BeOS,甚至MS-DOS。如果我沒記錯,甚至還有一個Amiga版本的。

7.它是派生來的

這是一件好事情嗎?拋去書本上的知識,它是有用的。牛頓曾說過“我如果看得比別人遠,那是因為我站在巨人的肩膀上”。Ruby同樣也是站在巨人的肩膀上,它借鑒了Smalltalk, CLU, Lisp, C, C++, Perl, Kornshell等的優點。在我看來它的原則包括:(1)不要重復制造輪子。(2)不要修補沒有損壞的東西。(3)最后一個也是比較特別的,它能平衡(Leverage)你已有的知識。你了解UNIX的文件和管道,沒關系,你可以在Ruby中繼續用,你用了兩年的時間學習了printf指示符,不必擔心,Ruby中你也可以使用printf。你知道Perl的正則表達式處理,那么你也就學會了Ruby中的正則表達式。

8.它是創新的

是不是覺得這個和第七條矛盾了?也許是有一部分矛盾,每個硬幣都有兩面。一些Ruby的特點都是創新的東西,比如非常有用的Mix-in,也許這個特點會被后來的語言借鑒。(注:一位讀者指出Lisp早在1979年就有mix-in了,這是我的疏忽;我應該找個更好的例子,并且能確信它。)

9.它是非常高層次的語言(Very High-Level Language :VHLL)

這是一個容易引起爭論的話題,因為這個術語還沒有廣泛使用。而且它的意思比起OOP來說還是有討論余地的。我這么說,指的是Ruby能支持復雜的結構和這些結構的復雜的操作,而需要的指令非常少,這與最小努力原則(Principle of Least Effort)一致。

10. 它有一個靈巧的垃圾收集器

像malloc和free這樣的例程已經是昨天的惡夢了,你不需要什么回收內存的操作,甚至是調用垃圾收集器。

11. 它是腳本語言

不要因為此就認為它不夠強大,它不是一個玩具。它是完全成熟的語言,用它能輕松的完成傳統的腳本操作,比如運行外部程序,檢查系統資源,使用管道,捕獲輸出等等。

12.它是通用的

Kornshell做的東西它也可以做,C語言做的東西它也可以做的很好。你可以用它寫一個只運行一次的只有10行的程序,或者對一些遺留程序進行包裝,你想寫個web server,或者一個CGI,都可以用Ruby來寫。

13.它是多線程的

Y你可以用一些簡單的API來寫多線程程序,甚至在MS-DOS上都可以。

14.它是open source的

你想看它的源代碼嗎?可以,你也可以提交補丁,參加廣泛的社區,包括它的創造者。

15.它是直覺的

Ruby的學習曲線比較低,而如果你翻過了一個坎,你開始“猜測”事情是怎么工作的,而且你的猜測很多時候都是正確的。Ruby堅持最小驚訝( Least Astonishment)的原則。

16.它有異常機制

像Java和C++一樣,Ruby中也有異常機制,這意味著你不必因為返回值而將代碼弄得凌亂不堪,很少的嵌套if語句,很少的意大利面條似的邏輯,更好的錯誤處理。

17.它有一個高級的數組類:Array

Ruby中數組都是動態的,你不必像pascal那樣在聲明它的大小,也不必像C,C++那樣為它分配內存。它們是對象,所以你不必關心它們的長度,實際上你不能“走到末尾(walk off the end)”。這個類提供了各種方法,使得你能夠根據索引,根據元素來訪問數組內容,也可以反向處理數組。你也可以用數作作為set,隊列,堆棧等。如果你想用查找表,可以用哈希結構。

18.它是可以擴展的

你可以用C或者Ruby來編寫外部庫(external libraries),同樣,你也可以修改已有的類和對象。


共2頁: 1 [2] 下一頁

原文轉自:http://www.anti-gravitydesign.com

...
国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97