中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
37個(gè)我愛Ruby的理由
 我不打算浪費(fèi)時(shí)間來談?wù)揜uby的歷史,如果你沒有聽說過它,你可以去它的主頁看看www.ruby-lang.org,或者去它的新聞組comp.lang.ruby。如果你知道Ruby,我將講述我為什么會(huì)喜愛它。(你也可能去我的Ruby主頁或者個(gè)人主頁看看)

  1. 它是面向?qū)ο蟮?/font>。 這表示什么意義呢? 如果問10個(gè)程序員,你也許會(huì)得到12種結(jié)果,你有你的看法,我不會(huì)試圖去改變你的看法。但是有一點(diǎn),Ruby提供了對(duì)數(shù)據(jù)和方法的封裝,允許類的繼承,對(duì)象的多態(tài)。不像其它語言(C++,Perl等),Ruby從設(shè)計(jì)的時(shí)候開始就是一種面向?qū)ο蟮恼Z言。

  2. 它是純面向?qū)ο蟮恼Z言。難道是我多余?不是這樣的,之所以這么說,因?yàn)镽uby中一切都是對(duì)象,包括原始數(shù)據(jù)類型(primitive data types),比如字符串,整型,都表示的是一個(gè)對(duì)象,而不需要Java那樣提供包裝類(wrapper classes)。另外,甚至是常量,也會(huì)被當(dāng)作對(duì)象來處理,所以一個(gè)方法的接收者,可以是一個(gè)數(shù)字常量。

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

  4. 它是一種解釋執(zhí)行的語言。這是一個(gè)負(fù)雜的問題,值得重點(diǎn)解釋一下,也許這個(gè)特點(diǎn)會(huì)因?yàn)樾阅艿脑蚨饛膬?yōu)點(diǎn)變?yōu)槿秉c(diǎn)的爭論。對(duì)于此,我有幾點(diǎn)見解:1.第一:快速開發(fā)循環(huán)是一個(gè)巨大的好處,這要得意于Ruby的解釋執(zhí)行。2.多慢才叫慢呢?在說它慢之前先定一個(gè)慢的基準(zhǔn)。3.也許有人要批評(píng)我了,但我還要說:處理器每年都在變得原來越快。4.如果你真的很在意你的速度,你可以用C開發(fā)一部分你的代碼。5.最后,從某種意義上說,這是一個(gè)還在爭論中的問題,沒有一個(gè)語言天生就是解釋型的,世界上沒有哪個(gè)法律進(jìn)制開發(fā)一個(gè)Ruby編譯器出來。

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

  6. 它是多平臺(tái)的。 Ruby可以運(yùn)行在Linux,UNIX,Windows,BeOS,甚至MS-DOS。如果我沒記錯(cuò),甚至還有一個(gè)Amiga 版本的

  7. 它是派生來的。 這是一件好事情嗎?拋去書本上的知識(shí),它是有用的。牛頓曾說過“我如果看得比別人遠(yuǎn),那是因?yàn)槲艺驹诰奕说募绨蛏?#8221;。Ruby同樣也是站在巨人的肩膀上,它借鑒了Smalltalk, CLU, Lisp, C, C++, Perl, Kornshell等的優(yōu)點(diǎn)。在我看來它的原則包括:1.不要重復(fù)制造輪子。2.不要修補(bǔ)沒有損壞的東西。3.最后一個(gè)也是比較特別的,它能平衡(Leverage )你已有的知識(shí)。你了解UNIX的文件和管道,沒關(guān)系,你可以在Ruby中繼續(xù)用,你用了兩年的時(shí)間學(xué)習(xí)了printf 指示符,不必?fù)?dān)心,Ruby中你也可以使用printf。你知道Perl的正則表達(dá)式處理,那么你也就學(xué)會(huì)了Ruby中的正則表達(dá)式。

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

  9. 它是非常高層次的語言。(Very High-Level Language :VHLL) 這是一個(gè)容易引起爭論的話題,因?yàn)檫@個(gè)術(shù)語還沒有廣泛使用。而且它的意思比起OOP來說還是有討論余地的。我這么說,指的是Ruby能支持復(fù)雜的結(jié)構(gòu)和這些結(jié)構(gòu)的負(fù)雜的操作,而需要的指令非常少,這與最小努力原則(Principle of Least Effort)一致。

  10. 它有一個(gè)靈巧的垃圾收集器。 mallocfree 這樣的例程已經(jīng)是昨天的惡夢了,你不需要什么回收內(nèi)存的操作,甚至是調(diào)用垃圾收集器。

  11. 它是腳本語言。 不要因?yàn)榇司驼J(rèn)為它不夠強(qiáng)大,它不是一個(gè)玩具。它是完全成熟的語言,用它能輕松的完成傳統(tǒng)的腳本操作,比如運(yùn)行外部程序,檢查系統(tǒng)資源,使用管道,捕獲輸出等等。

  12. 它是通用的。 Kornshell做的東西它也可以做,C語言做的東西它也可以做的很好。你可以用它寫一個(gè)只運(yùn)行一次的只有10行的程序,或者對(duì)一些遺留程序進(jìn)行包裝,你想寫個(gè)web server,或者一個(gè)CGI,都可以用Ruby來寫。

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

  14. 它是open source的。 你想看它的源代碼嗎?可以,你也可以提交補(bǔ)丁,參加廣泛的社區(qū),包括它的創(chuàng)造者。

  15. 它是直覺得。 Ruby的學(xué)習(xí)曲線比較低,而如果你翻過了一個(gè)坎,你開始“猜測”事情是怎么工作的,而且你的猜測很多時(shí)候都是正確的。Ruby堅(jiān)持最小驚訝( Least Astonishment)的原則。

  16. 它有異常機(jī)制。 像Java和 C++一樣, Ruby 中也有異常機(jī)制,這意味著你不必因?yàn)榉祷刂刀鴮⒋a弄得凌亂不堪,很少的嵌套if語句,很少的意大利面條似的邏輯,更好的錯(cuò)誤處理。

  17. 它有一個(gè)高級(jí)的數(shù)組類:Array。 Ruby中數(shù)組都是動(dòng)態(tài)的,你不必像pascal那樣在聲明它的大小,也不必像C,C++那樣為它分配內(nèi)存。它們是對(duì)象,所以你不必關(guān)心它們的長度,實(shí)際上你不能"走到末尾(walk off the end)"。這個(gè)類提供了各種方法,使得你能夠根據(jù)索引,根據(jù)元素來訪問數(shù)組內(nèi)容,也可以反向處理數(shù)組。你也可以用數(shù)作作為set,隊(duì)列,堆棧等。如果你想用查找表,可以用哈希結(jié)構(gòu)。

  18. 它是可以擴(kuò)展的。 你可以用C或者Ruby來編寫外部庫(external libraries),同樣,你也可以修改已有的類和對(duì)象。

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

  20. 創(chuàng)造性的使用標(biāo)點(diǎn)符號(hào)和大寫字母。 比如一個(gè)方法返回一個(gè)boolean型(Ruby中并沒有這種說法),那么一般這個(gè)方法最后都以問號(hào)結(jié)尾,如果一個(gè)方法要修改接收者本身,或者具有破壞性,則用一個(gè)感嘆號(hào)結(jié)尾,簡單,直覺。所有常量,包括類名,都以大寫字母開頭,所有對(duì)象屬性以@符號(hào)開頭。這有匈牙利命名法的實(shí)用性,但是沒有視覺上的丑陋性。

  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. 支持迭代器。 這使得你可以給一個(gè)數(shù)組,list,tree等對(duì)象傳遞一個(gè)塊,然后對(duì)它們的每個(gè)元素進(jìn)行block調(diào)用。這個(gè)技術(shù)值得深入學(xué)習(xí)。

  23. 它的安全性。 Ruby借鑒了Perl中基于$SAFE變量的分層控制機(jī)制 。這對(duì)于CGI程序來說非常有用,可以防止人們攻擊web服務(wù)器。

  24. Ruby中沒有指針。 像 Java一樣,和C++不同,Ruby中沒有指針的概念,所以免除了關(guān)于指針語法和調(diào)試的頭疼。當(dāng)然,這也意味著最底層的程序開發(fā)將會(huì)很困難,比如訪問一個(gè)設(shè)備的控制狀態(tài)寄存器;但是,我們可以用一個(gè)C庫來調(diào)用。(像C語言程序員有時(shí)候要使用匯編語言一樣,Ruby程序員有時(shí)候也要使用C語言來完成一定的任務(wù))

  25. 它使得人們專注于細(xì)節(jié)。 Ruby中有很多同義詞和別名,你也許不記得字符串或數(shù)組的長度是size還是length,沒關(guān)系,它們?nèi)魏我粋€(gè)都可以工作。對(duì)于Range來說,你可以使用begin end 或者使用 first last,它們也都工作。你想拼寫indices,結(jié)果寫成了indexes,沒關(guān)系,這兩個(gè)都一樣。

  26. 非常靈活的語法。 方法調(diào)用時(shí)候括號(hào)可以省略,參數(shù)之間只需用逗號(hào)分割。類似Perl風(fēng)格的數(shù)組定義可以讓你不用全部使用引號(hào)和逗號(hào)定義一個(gè)字符串的數(shù)組。關(guān)鍵字return可以生路。

  27. 豐富的庫函數(shù)。 Ruby提供了線程,socket,有限對(duì)象持久化,CGI,服務(wù)器端可執(zhí)行的,數(shù)據(jù)庫等其它庫函數(shù),還有對(duì)Tk的支持等。還有很多其它的庫函數(shù)。

  28. 本身自帶調(diào)試器(debugger)。 在完美的世界中,我們才不需要調(diào)試器,但是這個(gè)世界不是完美的。

  29. 交互式執(zhí)行。 可以用Ruby像Kornshell那樣執(zhí)行。 (這可能是本頁最具爭論的一點(diǎn),我不得不承認(rèn),Ruby真的不是一個(gè)很好的shell。但我仍然堅(jiān)持,基于Ruby的shell是一個(gè)不錯(cuò)的主意。)

  30. 它是簡明的。 不像Pascal那樣要求if后面跟著then,while后面跟著do 。變量不需要聲明,它們不需要類型。返回類型不必指定,關(guān)鍵字return 可以省略,它將返回最后一個(gè)表達(dá)式的值。另一方面,它也不像Perl或者C那樣復(fù)雜難懂。

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

  32. 語法砂糖(syntax sugar)。 (像Mary Poppins解釋:一勺語法的糖能使語義被接受) 。如果你想對(duì)數(shù)組x進(jìn)行迭代,可以用for a in x。你也可以用a+=b代替a=a+b,這都行。很多操作符其實(shí)在Ruby中都是方法,這些方法的名字比較直觀,短小,有著便利的語法。

  33. 它支持操作符重載。 如果我沒有記錯(cuò)的話,早在很久之前的SNOBOL就提供了這個(gè)功能,但是直到C++它才變得流行。雖然它可能亂用而出錯(cuò),但是這仍是一個(gè)非常不錯(cuò)的優(yōu)點(diǎn)。另外Ruby自動(dòng)定義操作符的賦值版本,比如,如果你重定義了+,那么,你同時(shí)得到了一個(gè)+=操作符。

  34. 支持無限精度的數(shù)字。 有人會(huì)關(guān)心 short, int, long嗎,只需要使用 Bignum就行了,你可以輕松的實(shí)現(xiàn)365的階乘。

  35. 有冪操作符。 在很久以前,我們在BASIC和FORTRAN中使用它,然而當(dāng)我們學(xué)習(xí)Pascal和C之后,我們才認(rèn)識(shí)到這個(gè)操作符有多差勁。(我們被告知自己連它是怎么工作的都不知道-它使用了對(duì)數(shù),迭代了嗎,效率如何?),但是,我們真的關(guān)系這些嗎?如果是,我們可以重寫這個(gè)方法,否則,Ruby有非常好的**操作符可以用。

  36. 強(qiáng)大的字符串處理。 If如果你想查找,判斷,格式化,trim,定界(delimit),interpose,tokenize,你可以自己選擇隨便用哪一個(gè)來得到你想要的結(jié)果。

  37. 規(guī)則很少引起異常。 Ruby的語法和語義比其它語言有條理,每種語言都有獨(dú)特的一面,每條規(guī)則都會(huì)有異常發(fā)生,但是Ruby規(guī)則引起的異常就少的多了。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服