新聞中心
Ruby,一種為簡(jiǎn)單快捷的面向?qū)ο缶幊蹋嫦驅(qū)ο蟪绦蛟O(shè)計(jì))而創(chuàng)的腳本語(yǔ)言,在20世紀(jì)90年代由日本人松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)開(kāi)發(fā),遵守GPL協(xié)議和Ruby License。

成都創(chuàng)新互聯(lián)是專(zhuān)業(yè)的通河網(wǎng)站建設(shè)公司,通河接單;提供網(wǎng)站制作、網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專(zhuān)業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行通河網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專(zhuān)業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專(zhuān)業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!
一、Ruby 是面向?qū)ο笳Z(yǔ)言。
這意味著什么呢?的確,關(guān)于“什么是 OOP”,每十位程序員當(dāng)中恐怕就有十二種看法。這個(gè)問(wèn)題我留待您自己判斷。而就特征而言,Ruby 提供了機(jī)制,將數(shù)據(jù)和方法封裝到對(duì)象里,實(shí)現(xiàn)了一個(gè)類(lèi)到另一個(gè)類(lèi)的繼承機(jī)制,還提供對(duì)象多態(tài)機(jī)制。與某些語(yǔ)言(C++、Perl 5 等等)不同的是,Ruby 從一開(kāi)始的時(shí)候就是以面向?qū)ο鬄槟繕?biāo)來(lái)設(shè)計(jì)的。
二、Ruby 是“純正”的 OOP 語(yǔ)言。
我說(shuō)重復(fù)了么?我可不這么認(rèn)為。說(shuō)“純正”,這就意味著,所有的一切——包括字符串或整型之類(lèi)的基本數(shù)據(jù)類(lèi)型——都是以對(duì)象的形態(tài)來(lái)表達(dá)的。在 Ruby 中用不著 Java 里面提供的那種 wrapper class(包裹類(lèi))(譯注:wrapper class 用來(lái)將基本類(lèi)型包裝成對(duì)象類(lèi)型)。而且,甚至連常量都被當(dāng)作對(duì)象來(lái)對(duì)待,因此方法可以由——比如數(shù)字常量——來(lái)喚起。
三、Ruby 是動(dòng)態(tài)語(yǔ)言。
對(duì)于只熟悉諸如 C++、Java 等靜態(tài)語(yǔ)言的人而言,這就是個(gè)新概念。所謂動(dòng)態(tài)意味著,可以在運(yùn)行期動(dòng)態(tài)地追加或者重新定義方法和變量。這種動(dòng)態(tài)機(jī)制免除了對(duì) C 語(yǔ)言中條件編譯(#ifdef)這類(lèi)功能的需要,并且使構(gòu)建復(fù)雜的 reflection(內(nèi)省機(jī)制)API 成為可能。
復(fù)雜的 reflection 機(jī)制又進(jìn)而使得程序可以變得更為“自知(self-aware)”——從而為如下諸多功能開(kāi)啟了方便之門(mén):運(yùn)行期類(lèi)型信息、丟失方法的偵測(cè)、能夠偵測(cè)新追加的方法的鉤子技術(shù),等等。從這個(gè)方面來(lái)看,Ruby 與 Lisp 和 Smalltalk 有些許親緣關(guān)系。
四、Ruby 是解釋型語(yǔ)言。
這是個(gè)復(fù)雜問(wèn)題,值得多說(shuō)幾句。有人可以爭(zhēng)論說(shuō),從性能方面來(lái)考量,語(yǔ)言采用解釋型機(jī)制弊大于利。對(duì)于這種想法,我用下面的斟酌予以回應(yīng):
1. 首先最為顯著的是,快速開(kāi)發(fā)周期(rapid development cycle)頗有效益可得,Ruby 的解釋型語(yǔ)言本質(zhì)助長(zhǎng)這種效益。
2. 太慢到底是多慢呢?說(shuō)慢之前請(qǐng)先做一些性能測(cè)試。
3. 盡管會(huì)有人因此而批評(píng)我,但我還是要這么說(shuō):處理器每年都在持續(xù)提速。
4. 如果您著實(shí)需要速度,您可以用 C 語(yǔ)言撰寫(xiě)需要速度的那部分代碼。
5. ***,從某種意義上說(shuō),有一種值得商榷的觀點(diǎn):鑒于沒(méi)有哪種語(yǔ)言是從骨子里就被解釋?zhuān)虼瞬⒉荒苷f(shuō)不可能撰寫(xiě)出 Ruby 編譯器。
五、Ruby 能夠處理正則表達(dá)式。
多年以來(lái),正則表達(dá)式一直被認(rèn)為是屬于 UNIX 領(lǐng)域的雕蟲(chóng)小技,涉及諸如 grep 和 sed 之類(lèi)的陽(yáng)春工具,或是在 vi 里面做一些討巧的“查找-替換”操作。Perl 語(yǔ)言幫助人們改變了這種看法,而現(xiàn)在 Ruby 也對(duì)此有所幫助。越來(lái)越多的人認(rèn)識(shí)到這種超高級(jí)的字符串和文本操縱技巧中所蘊(yùn)含的無(wú)比威力。對(duì)此持懷疑態(tài)度者,應(yīng)該去讀一讀 Jeffrey Friedl 的書(shū) Mastering Regular Expressions 。非懷疑論者也應(yīng)該讀。
六、Ruby 是支持多種平臺(tái)的語(yǔ)言。
Ruby 可以運(yùn)行在 Linux 及其他 UNIX 變體、各種版本 Windows 平臺(tái)、BeOS,甚至 MS-DOS 上。如果我沒(méi)記錯(cuò)的話,還有 Amiga 版本的。
七、Ruby 借鑒了前輩語(yǔ)言。
這是好事兒?jiǎn)幔吭谖膶W(xué)領(lǐng)域之外,是的,這是好事兒。牛頓說(shuō),“若我看得比別人遠(yuǎn),乃是因?yàn)槲艺驹诹司奕说募缟稀?。Ruby 確實(shí)是站在了巨人的肩上。Ruby 引借了來(lái)自 Smalltalk, CLU, Lisp, C, C++, Perl, Kornshell,以及其他語(yǔ)言的特性。
我看到其中的原則是:
1. 不要重新發(fā)明輪子;
2. 不要修補(bǔ)沒(méi)有問(wèn)題的部分;
3. 特別重要的是,充分利用人們現(xiàn)有的知識(shí)。
您掌握 UNIX 里面的文件和管道(pipes)嗎?沒(méi)問(wèn)題,您可以在 Ruby 中運(yùn)用到那些知識(shí)。您花了兩年時(shí)間研習(xí) printf 的各種格式符號(hào)?別擔(dān)心,您在 Ruby 里面還可以使用 printf。您了解 Perl 的 regex handling 技術(shù)?好的,那么您幾乎也就立刻學(xué)會(huì)了 Ruby 的 regex handling 技術(shù)。
八、Ruby 具創(chuàng)新性。
這一條與第7條有些矛盾吧?唔……是有一點(diǎn);每個(gè)硬幣都有兩面嘛。Ruby 有一些特征***創(chuàng)新性,比如非常有用的 mix-in 概念?;蛟S這些創(chuàng)新型特征將來(lái)會(huì)被新的語(yǔ)言借鑒。(注:一位讀者向我指出,LISP 至少早在 1979 年就有 mix-in 了。這一點(diǎn)我倒是完全沒(méi)有注意到;我當(dāng)另尋一個(gè)更好的例證,保證其真確性。)
九、Ruby 是特高級(jí)語(yǔ)言(Very High-Level Language,VHLL)。
這個(gè)問(wèn)題有待商榷,因?yàn)樾g(shù)語(yǔ) VHLL 還未被廣泛使用,而其含義更是比 OOP 的含義更具爭(zhēng)議性。我說(shuō)“特高級(jí)”指的是,Ruby 可以通過(guò)相對(duì)較少的指令掌控復(fù)雜的數(shù)據(jù)結(jié)構(gòu)并對(duì)其進(jìn)行復(fù)雜的操作,符合了被一些人稱(chēng)為“最少投入”的原則(Principle of Least Effort)。
十、Ruby 有智能垃圾收集器。
諸如 malloc 和 free 之類(lèi)的函數(shù)現(xiàn)在只是已然過(guò)去的昨夜噩夢(mèng)。您連析構(gòu)函數(shù)都不需要調(diào)用。僅此足矣。
十一、Ruby 是腳本語(yǔ)言。
不要以為 Ruby 是腳本語(yǔ)言所以就不強(qiáng)大。Ruby 可不是玩具。Ruby 是全功能的程序設(shè)計(jì)語(yǔ)言,只不過(guò) Ruby 讓傳統(tǒng)的腳本操作變得更容易撰寫(xiě),比如運(yùn)行外部程序、檢查系統(tǒng)資源、使用 pipe(管道)、截獲輸出等等。
十二、Ruby 用處多樣。
Ruby 可以完成好 Kornshell 能夠完成好的事情,也可以完成好 C 語(yǔ)言能夠完成好的事情。想快速寫(xiě)一個(gè)十行的 hack 程序來(lái)完成一次性的任務(wù),或者為遺留代碼寫(xiě)個(gè) wrapper 嗎?用 Ruby 沒(méi)問(wèn)題。想寫(xiě)一個(gè) Web 服務(wù)器、CGI,或者棋類(lèi)游戲嗎?用 Ruby 也沒(méi)問(wèn)題。
十三、Ruby 對(duì)線程予以支持。
您可以使用簡(jiǎn)單的 API 撰寫(xiě)多線程應(yīng)用程序。是的,即使是在 MS-DOS 上撰寫(xiě)也可以。
十四、Ruby 是開(kāi)源的。
想看 Ruby 的源代碼了?想提供一個(gè)補(bǔ)丁建議了?只管去吧!想與智慧云集、樂(lè)于助人、包括語(yǔ)言設(shè)計(jì)者在內(nèi)的用戶(hù)社區(qū)進(jìn)行聯(lián)絡(luò)嗎?可以的!
十五、Ruby 具有直觀性(直覺(jué)性)。
學(xué)習(xí)曲線平滑不陡。一旦入了門(mén),您是否就開(kāi)始“猜測(cè)” Ruby 的使用方式了呢?您的猜測(cè)通常是正確的(譯注:因?yàn)?Ruby 很直觀,符合了人們慣常期待的方式)。Ruby 致力于符合“最少詫異或驚訝”之原則(Principle of Least Astonishment (or Surprise)).
十六、Ruby 具有異常(exception)機(jī)制。
同 Java 和 C++ 一樣,Ruby 能處理異常。這意味著少與返回代碼糾纏,更少的嵌套 if 語(yǔ)句,更少的意大利面式邏輯(spaghetti logic,貶義,指的是復(fù)雜混亂的代碼設(shè)計(jì),比如大量使用GOTO語(yǔ)句等等),更好的錯(cuò)誤處理機(jī)能。
十七、Ruby 有高級(jí)的 Array class 。
數(shù)組是動(dòng)態(tài)的;您不必像在 Pascal 等語(yǔ)言當(dāng)中那樣在編譯期聲明數(shù)組大小。您不必像在 C/C++/Java 當(dāng)中那樣為數(shù)組分配內(nèi)存空間。Ruby 的數(shù)組是對(duì)象,因此您不必時(shí)刻警惕其長(zhǎng)度;原則上,您不可能像在 C 語(yǔ)言當(dāng)中那樣“越出數(shù)組的長(zhǎng)度大限”。想以索引、元素,或者反向處理數(shù)組嗎?想打印整個(gè)數(shù)組嗎?Ruby 為所有這些事情提供了對(duì)應(yīng)的方法。想把數(shù)組當(dāng)作集合(set)、堆棧(stack),或隊(duì)列(queue)來(lái)對(duì)待嗎?Ruby 也為此提供了對(duì)應(yīng)的方法。想把數(shù)組當(dāng)作查找表(lookup table)來(lái)使用嗎?這是個(gè)問(wèn)題問(wèn)得巧——您不必這樣用,因?yàn)?Ruby 提供了哈希表專(zhuān)門(mén)處理這個(gè)問(wèn)題。
十八、Ruby 是可擴(kuò)展的。
您可以用 Ruby 或者 C 語(yǔ)言編寫(xiě)外部程序庫(kù)。另外,您還可以隨心所欲地就地修改現(xiàn)存的類(lèi)和對(duì)象。
十九、Ruby 鼓勵(lì) literate programming(字面編程方式)。
您可以將注釋嵌入到代碼中,Ruby 的文檔工具可以從中抽取和操縱這些注釋。(Literate programming 的鐵桿兒支持者或許會(huì)認(rèn)為這是很基礎(chǔ)的東西吧。)
二十、Ruby 以創(chuàng)新的方式使用分隔符和大小寫(xiě)。
返回 Boolean(盡管 Ruby 不這樣稱(chēng)呼它)的方法通常都以問(wèn)號(hào)結(jié)尾,而且,修改數(shù)據(jù)的方法的名稱(chēng)帶有驚嘆號(hào)。一切都簡(jiǎn)單、明了、直觀。包括 class 名稱(chēng)在內(nèi)的所有常量都以大寫(xiě)字母開(kāi)頭。所有對(duì)象的 attributes 都以 @ 標(biāo)記開(kāi)頭。這種方案既有老式的“匈牙利表示法(Hungarian notation)”的務(wù)實(shí)性,又避免了齷齪刺眼的表現(xiàn)形式。
二十一、Ruby 的保留字不保留。
使用被稱(chēng)為“保留字(reserved word)”的標(biāo)識(shí)符是完全沒(méi)有問(wèn)題的,只要保證別讓語(yǔ)法分析器遇到歧義的情況就行。這可真是暢快。
二十二、Ruby 支持迭代器(iterator)。
Ruby 的迭代器使得“傳遞代碼區(qū)塊到對(duì)象中”這種操作可以經(jīng)由這樣的方式來(lái)完成,即對(duì)于數(shù)組、列表(list)、樹(shù)(tree)等諸多結(jié)構(gòu)中的每一個(gè)元素都能夠調(diào)用指定的代碼區(qū)塊。這是個(gè)值得深入探究,威力強(qiáng)大的技巧。
二十三、Ruby 具有安全性特性。
Ruby 借用了 Perl 的“點(diǎn)綴(tainting)”概念,通過(guò) $SAFE 變量實(shí)現(xiàn)了多種控制級(jí)別(揪心級(jí)別?)。此特性對(duì)于“為了攻破 web 服務(wù)器而被利用”的 CGI 程序而言,特別有好處。
二十四、Ruby 沒(méi)有指針。
類(lèi)似 Java,并向 C++ 惡狠狠地點(diǎn)了點(diǎn)頭,Ruby 中沒(méi)有“指針(pointer)”概念;不存在間接性,沒(méi)有指針運(yùn)算,沒(méi)有語(yǔ)法和調(diào)試指針?biāo)鶐?lái)的頭疼困擾。當(dāng)然,這意味著真正底層的系統(tǒng)編程變得困難了一些,比如訪問(wèn)某設(shè)備的控制狀態(tài)寄存器;但這些系統(tǒng)級(jí)事務(wù)總是可以利用 C 程序庫(kù)來(lái)完成。(正如 C 程序員會(huì)在必要時(shí)使用匯編一樣,Ruby 程序員會(huì)在必要時(shí)使用 C 語(yǔ)言?。?/p>
由于本文過(guò)長(zhǎng),分為上下兩篇為大家介紹,請(qǐng)看下一篇>>
網(wǎng)頁(yè)題目:Ruby受歡迎的三十七個(gè)理由(上)
網(wǎng)站路徑:http://www.5511xx.com/article/dhodheg.html


咨詢(xún)
建站咨詢(xún)
