選擇Ruby的37個理由【轉載】

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

  2. 它是純面向對象的語言。難道是我多餘?不是這樣的,之因此這麼說,由於Ruby 中一切都是對象,包括原始數據類型(primitive data types),好比字符串,整型,都表示的是一個對象,而不須要Java那樣提供包裝類(wrapper classes)。另外,甚至是常量,也會被看成對象來處理,因此一個方法的接收者,能夠是一個數字常量。web

  3. 它是動態語言。 對於只熟悉像C++,Java這樣靜態語言的人來講,這是一個重大的概念上的差異。動態意味着方法和變量能夠在運行時候添加和重定義。它減小了像C語言那樣的條件編譯(#ifdef),並且容易實現反射API(reflection API)。動態性使得程序能自我感知(self-aware),好比運行時類型信息,檢測丟失的方法,用來檢測增長方法的鉤子等。在這些方面Ruby和Lisp和Smalltalk都有一些關係。正則表達式

  4. 它是一種解釋執行的語言。這是一個負雜的問題,值得重點解釋一下,也許這個特色 會由於性能的緣由而引發從優勢變爲缺點的爭論。對於此,我有幾點看法:1.第一:快速開發循環是一個巨大的好處,這要得意於Ruby的解釋執行。2.多慢 才叫慢呢?在說它慢以前先定一個慢的基準。3.也許有人要批評我了,但我還要說:處理器每一年都在變得原來越快。4.若是你真的很在乎你的速度,你能夠用C 開發一部分你的代碼。5.最後,從某種意義上說,這是一個還在爭論中的問題,沒有一個語言天生就是解釋型的,世界上沒有哪一個法律進制開發一個Ruby編譯 器出來。 shell

  5. 它理解正則表達式。 不少年以前,正則表達式只是用在UNIX的工具如grep 或者sed中,或者在vi中進行一些必定的查找-替換等。Perl的出現解決了這些問題,而如今,Ruby一樣也能作到這些。愈來愈多得人認識到了這種字 符串和文本處理技術的難以置信的能力,若是你對此表示懷疑,那麼請去看一下 Jeffrey Friedl的書Mastering Regular Expressions,而後,你就應該不會有什麼懷疑了。數據庫

  6. 它是多平臺的。 Ruby能夠運行在Linux,UNIX,Windows,BeOS,甚至MS-DOS。若是我沒記錯,甚至還有一個Amiga 版本的express

  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. 它有一個靈巧的垃圾收集器。 mallocfree 這樣的例程已是昨天的惡夢了,你不須要什麼回收內存的操做,甚至是調用垃圾收集器。 服務器

  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),一樣,你也能夠修改已有的類和對象。

  19. 鼓勵文檔編程(literate programming)。 你能夠在Ruby程序中嵌入註釋或者文檔,這些文檔能夠用Ruby的文檔工具提取和處理。(真正的文檔編程者可能認爲這是必須的基本東西吧)

  20. 創造性的使用標點符號和大寫字母。 好比一個方法返回一個boolean型 (Ruby中並無這種說法),那麼通常這個方法最後都以問號結尾,若是一個方法要修改接收者自己,或者具備破壞性,則用一個感嘆號結尾,簡單,直覺。所 有常量,包括類名,都以大寫字母開頭,全部對象屬性以@符號開頭。這有匈牙利命名法的實用性,可是沒有視覺上的醜陋性。

  21. Reserved words aren't.It's perfectly allowable to use an identifier that is a so-called "reserved word" as long as the parser doesn't perceive an amibiguity. This is a breath of fresh air.(能用保留字做爲變量嗎?沒看太懂。)

  22. 支持迭代器。 這使得你能夠給一個數組,list,tree等對象傳遞一個塊,而後對它們的每一個元素進行block調用。這個技術值得深刻學習。

  23. 它的安全性。 Ruby借鑑了Perl中基於$SAFE變量的分層控制機制 。這對於CGI程序來講很是有用,能夠防止人們攻擊web服務器。

  24. Ruby中沒有指針。 像 Java同樣,和C++不一樣,Ruby中沒有指針的概念,因此免除了關於指針語法和調試的頭疼。固然,這也意味着最底層的程序開發將會很困難,好比訪問一 個設備的控制狀態寄存器;可是,咱們能夠用一個C庫來調用。(像C語言程序員有時候要使用匯編語言同樣,Ruby程序員有時候也要使用C語言來完成必定的 任務)

  25. 它使得人們專一於細節。 Ruby中有不少同義詞和別名,你也許不記得字符串或數組的長度是size仍是length,不要緊,它們任何一個均可以工做。對於Range來講,你可使用begin end 或者使用 first last,它們也都工做。你想拼寫indices,結果寫成了indexes,不要緊,這兩個都同樣。

  26. 很是靈活的語法。 方法調用時候括號能夠省略,參數之間只需用逗號分割。相似Perl風格的數組定義可讓你不用所有使用引號和逗號定義一個字符串的數組。關鍵字return能夠生路。

  27. 豐富的庫函數。 Ruby提供了線程,socket,有限對象持久化,CGI,服務器端可執行的,數據庫等其它庫函數,還有對Tk的支持等。還有不少其它的庫函數。

  28. 自己自帶調試器(debugger)。 在完美的世界中,咱們纔不須要調試器,可是這個世界不是完美的。

  29. 交互式執行。 能夠用Ruby像Kornshell那樣執行。 (這多是本頁最具爭論的一點,我不得不認可,Ruby真的不是一個很好的shell。但我仍然堅持,基於Ruby的shell是一個不錯的主意。)

  30. 它是簡明的。 不像Pascal那樣要求if後面跟着thenwhile後面跟着do 。變量不須要聲明,它們不須要類型。返回類型沒必要指定,關鍵字return 能夠省略,它將返回最後一個表達式的值。另外一方面,它也不像Perl或者C那樣複雜難懂。

  31. 它是面向表達式的(expression-oriented)。 你能夠輕易的使用 x = if a<0 then b else c  這樣的表達式。

  32. 語法砂糖(syntax sugar)。 (像Mary Poppins解釋:一勺語法的糖能使語義被接受) 。若是你想對數組x進行迭代,能夠用for a in x。你也能夠用a+=b代替a=a+b,這都行。不少操做符其實在Ruby中都是方法,這些方法的名字比較直觀,短小,有着便利的語法。

  33. 它支持操做符重載。 若是我沒有記錯的話,早在好久以前的SNOBOL就提供了這個功能,可是直到C++它才變得流行。雖然它可能亂用而出錯,可是這還是一個很是不錯的優勢。另外Ruby自動定義操做符的賦值版本,好比,若是你重定義了+,那麼,你同時獲得了一個+=操做符。

  34. 支持無限精度的數字。 有人會關心 short, int, long嗎,只須要使用 Bignum就好了,你能夠輕鬆的實現365的階乘。

  35. 有冪操做符。 在好久之前,咱們在BASIC和FORTRAN中使用它,然而當 咱們學習Pascal和C以後,咱們才認識到這個操做符有多差勁。(咱們被告知本身連它是怎麼工做的都不知道-它使用了對數,迭代了嗎,效率如何?),但 是,咱們真的關係這些嗎?若是是,咱們能夠重寫這個方法,不然,Ruby有很是好的**操做符能夠用。

  36. 強大的字符串處理。 If若是你想查找,判斷,格式化,trim,定界(delimit),interpose,tokenize,你能夠本身選擇隨便用哪個來獲得你想要的結果。

  37. 規則不多引發異常。 Ruby的語法和語義比其它語言有條理,每種語言都有獨特的一面,每條規則都會有異常發生,可是Ruby規則引發的異常就少的多了。

相關文章
相關標籤/搜索