亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

在咖啡里加糖 論Java世界的Ruby

2019-11-18 15:28:11
字體:
來源:轉載
供稿:網友
利用動態腳本編寫你的java應用程序以及重用你的Java類庫

  自從計算機誕生以來,軟件開發就傾向于使用高級語言進行開發。從匯編,到C,到C++,再到JAVA,每一次升級就會面臨來自各界同樣的問題:太慢、而且有太多的Bug、開發者不想放棄對這些原有語言的使用。漸漸地,隨著硬件的快速發展,新的研究和開發技術大大改進了編譯器、解釋器、和虛擬機,開發者不得不向高級語言轉移,放棄他們使用的低級語言開發以提高生產力(將他們從低級語言的障礙中釋放出來以提高他們的生產力)。

  Java現在在軟件開發的很多領域里面占有主導地位,但是在這個發展過程中,動態腳本很有可能無情地取代它的地位。許多年以來,像Python、Perl、Rexx、Groovy、TCL和Ruby這樣的語言能夠在很多專業領域里面非常出色地工作,例如文件處理、自動測試、軟件構建、代碼重構、和Web圖形頁面設計——他們有著歷史性的名字“腳本語言”。而且在最近的一些年里,在大多數由Java,C++和其他編譯型計算機語言開發的大型工作里面,他們也取得了相應的進展。

  去年的時候,Ruby on Rails(RoR)Web框架使Ruby有了更進一步的發展。RoR結構利用簡單的Ruby代碼定義了一個典型的多層次Web應用程序——圖形頁面層、業務邏輯層和數據持久層,因此減小了冗余文件、樣本文件代碼、生成的源代碼以及配置文件。RoR框架能夠更加優化更加輕易地使用Ruby語言;而且Ruby,這種完善的腳本語言,相對于RoR框架來說可以在更多的領域里面使用。
  
  作為一個長期的Java開發者,我很可能堅持在一段時間里一直用Java作開發。但是我仍然保持在我開發的基于Java的系統里面使用其他的語言,而且Ruby最近顯示出來是非凡好的一種候選語言。在JRuby解釋器的幫助下,Ruby和Java一起工作得很好,包括配置、整合、和Java軟件的重用。而且在簡單學習Ruby的過程中也提高了我Java代碼的質量。使用Ruby可以讓我很輕易地完成像功能程序和元程序一樣的技術手法,這些技術手法我在Java里面都是很難實現的。學習這些Ruby里面的技術手法可以幫助我更好鑒別什么時候而且怎樣在Java開發中使用它。

  這篇文章,我希望能夠和你一起分享我在開發Java系統的時候使用Ruby的那種興奮感。我比較一下Java和Ruby的優點和缺點,而且介紹一下JRuby解釋器的支持者和反對者。而且我會向大家顯示區分Ruby和Java使用的最佳實踐以讓它們各自得到最優化的使用。我會使用一些簡單的代碼來舉例說明這個觀點,并且介紹一個消息實例來展示在Java系統里面怎樣結合使用Ruby,使其能夠更好地使用動態元程序語言的彈性、表現方式以及功能。

  Ruby vs. Java

  這篇文章從一個Java開發者的角度解釋了Ruby,主要是集中比較這兩種語言。像Java一樣,Ruby也是一種完全的面向對象的語言。但是這兩種語言有很大的不同。Ruby是動態類型的而且是在源代碼解釋器里面運行的,這種語言能夠像程序和功能范例一樣支持元編程。我這里不會介紹Ruby的具體語法,接下來的文章里面會廣泛地覆蓋其他各個方面。

  動態類型

  Java有靜態類型。你定義每個變量的類型,接下來在編譯的過程中,假如你使用了類型錯誤的變量將會得到一個編譯時錯誤。Ruby卻相反,擁有動態類型:你不用定義函數和變量的類型,而且沒有到運行的時候不會使用類型檢測,假如你調用一個不存在的方法就會得到錯誤信息。盡管這樣,Ruby不會關心一個對象類型,僅僅看它是否在一個方法里面調用了這個對象的方法。因為這個原因,這種動態方法可以得到這樣一個dUCk類型:“假如一個事物走起來像一只鴨子(duck)而且像一只鴨子(duck)呷呷地叫,它就是一只鴨子。”

Listing1.Duck typing
class ADuck
    def quack()
        puts "quack A";
    end
end
class BDuck
    def quack()
        puts "quack B";
    end
end
# quack_it doesn't care about the type of the argument duck, as long
# as it has a method called quack. Classes A and B have no
# inheritance relationship.
def quack_it(duck)
    duck.quack
end
a = ADuck.new
b = BDuck.new
quack_it(a)
quack_it(b)


  Java也可以通過反射讓你使用動態類型,但是這種笨拙冗長的工作會導致很多混亂的異常發生,像NoSuchMethodError和InvocationTargetException;在實踐中,這些異常傾向于在Java反射的代碼中忽然出現,而且相對于Ruby而言出現頻率更高。

  即使在沒有使用反射的Java代碼中,你會經常丟失掉靜態類型的信息。比如,在Command設計模式里面使用execute()方法必須返回Object勝于在Java代碼里面使用的非凡類型,結果會導致很多ClassCastException發生。同樣的,當在編譯時和運行時修改方法簽名的時候,運行時錯誤就會發生。在實踐開發中,不論是Java還是Ruby,這樣的錯誤很少引起嚴重的程序Bug。一個健壯的單元測試——任何時候你都會用到的——通常都能夠及時捕捉他們。

  Ruby的動態類型意思是你不用重復問你自己一個問題:在Java里面你是否經常在一行里面碰到這樣冗長的代碼:
xmlPersistence xmlPersistence
= (XMLPersistence)persistenceManager.getPersistence();

  Ruby消除了這種對于類型定義和轉換的需要,上邊的代碼用一個典型的Ruby等價表達為;
xmlPersistence = persistence_manager.persistence.

  Ruby的動態類型意義上不是弱類型——Ruby經常需要你傳遞正確類型的對象。事實上,Java強制類型轉換比Ruby要弱。例如,Java里面:”4”+2 等于”42”,這里會將整數轉化為字符串,在Ruby里會拋出一個TypeError,告訴你這個“can't convert Fixnum into String.”(Fixnum類型是不可以轉化為String的)。同樣的,Java里,因為作類型校正犧牲了速度,而且過多地做了整型操作,產生像Integer.MAX_VALUE + 1的整型,和Integer.MIN_VALUE等價,可是Ruby類型校正整型只是在需要的時候。

  不論Ruby有什么優點,Java的靜態類型可以讓它在大規模的項目里面作為首選:Java工具能夠在開發時候明白代碼意思。IDE能夠在類之間依靠跟蹤,找到方法和類的用處,自動檢標識符而且幫助你檢測代碼。同樣的雖然Ruby工具在這些功能上存在限制,它缺乏類型信息所以不能夠完成上邊這些工作。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产一区二区av| 亚洲欧美国产视频| 69av在线视频| 国产欧美精品va在线观看| 亚洲成人a**站| 亚洲第一av在线| 欧美性xxxxx极品娇小| 亚洲理论片在线观看| 国产精品成人免费视频| 国产99视频精品免视看7| 欧美综合一区第一页| 国产精品欧美一区二区三区奶水| 久久欧美在线电影| 日本午夜精品理论片a级appf发布| 九九久久综合网站| 欧美综合激情网| 亚洲国产精品va在线看黑人动漫| 久久精品国产电影| 91免费在线视频网站| 日韩精品免费在线视频观看| 欧美黑人一级爽快片淫片高清| 日韩经典中文字幕| 91亚洲精品久久久| 亚洲精品免费网站| 国产精品视频中文字幕91| 亚洲影院高清在线| 欧美在线视频观看免费网站| 欧美色道久久88综合亚洲精品| 国产日韩欧美日韩大片| 久久99热精品这里久久精品| 欧美在线视频观看免费网站| 亚洲bt天天射| 午夜精品久久久99热福利| 国产91精品高潮白浆喷水| 欧美成年人在线观看| 伊人青青综合网站| 亚洲精品第一国产综合精品| 北条麻妃一区二区在线观看| 欧美自拍视频在线| 欧美日韩亚洲精品内裤| 亚洲成人三级在线| 日韩在线视频观看正片免费网站| 国产原创欧美精品| 国产精品一区二区av影院萌芽| 精品国产欧美成人夜夜嗨| 日韩av毛片网| 国产精品久久综合av爱欲tv| 亚洲天堂av网| 日韩三级影视基地| 国产精品老女人视频| 国产精品国产三级国产专播精品人| 欧美成人精品三级在线观看| 久久久亚洲精品视频| 欧美激情第三页| 欧美激情精品久久久久久久变态| 久久久久久18| 国产成人精品免高潮在线观看| 欧美黑人巨大精品一区二区| 国产精品jvid在线观看蜜臀| 最好看的2019年中文视频| 亚洲国产精品久久91精品| 欧美成人精品在线视频| 日本国产高清不卡| 国产精品美女无圣光视频| 91高清在线免费观看| 欧美性猛交xxxx偷拍洗澡| 色婷婷成人综合| 国产va免费精品高清在线| 日韩av影院在线观看| 日韩在线观看免费网站| 欧洲亚洲妇女av| 国产精品直播网红| 韩国一区二区电影| 精品二区三区线观看| 在线播放精品一区二区三区| 亚洲加勒比久久88色综合| 亚洲人成网站免费播放| 日韩美女在线看| 国产精品va在线播放我和闺蜜| 色七七影院综合| 久久精品视频一| 5566成人精品视频免费| 国产精品一区二区三区久久| 精品中文字幕乱| 日韩欧美aaa| 亚洲人成电影在线| 国产精品视频最多的网站| 亚洲欧洲日产国码av系列天堂| 久久精品视频中文字幕| 亚洲综合最新在线| 久久精品国产99国产精品澳门| 日韩av有码在线| 日韩免费在线观看视频| 欧美一级高清免费播放| 午夜精品美女自拍福到在线| 最近2019年好看中文字幕视频| 国产91色在线播放| 日韩成人在线播放| 国产一区二区三区在线观看视频| 91精品国产综合久久香蕉| 韩国19禁主播vip福利视频| 精品视频一区在线视频| 欧美最猛性xxxxx亚洲精品| 日韩在线视频导航| 精品国产一区二区在线| 欧美一性一乱一交一视频| 精品亚洲永久免费精品| 亚洲国产精品热久久| 中文字幕日韩av综合精品| 亚洲人成网在线播放| 日韩av网站导航| 国产成人福利视频| 精品国产1区2区| 久久久综合免费视频| 久久久精品国产亚洲| 亚洲天天在线日亚洲洲精| 欧美成人亚洲成人日韩成人| 91色p视频在线| 亚洲男人天堂手机在线| 国产亚洲精品高潮| 亚洲成avwww人| 欧美xxxx18性欧美| 亚洲福利视频二区| 亚洲欧美在线免费| 亚洲国产成人在线播放| 久久亚洲一区二区三区四区五区高| 97精品在线观看| 国产精品激情自拍| 欧美大成色www永久网站婷| 国产免费一区视频观看免费| 亚洲成人久久网| www欧美日韩| 欧美午夜视频在线观看| 亚洲天堂网站在线观看视频| 日韩电影在线观看免费| 久久九九国产精品怡红院| 欧美国产日韩xxxxx| 亚洲国产精品电影在线观看| 亚洲japanese制服美女| 欧美日韩国产在线看| 欧美一区二区大胆人体摄影专业网站| 色香阁99久久精品久久久| 亚洲欧美日韩精品久久| 国产欧美最新羞羞视频在线观看| 国产精品免费看久久久香蕉| 国产噜噜噜噜久久久久久久久| 欧美黑人xxxⅹ高潮交| 国产精品扒开腿做爽爽爽的视频| 亚洲精品www久久久| 欧美国产亚洲视频| 97免费视频在线播放| 国产精品久久999| 欧美乱妇高清无乱码| 欧美日韩国产成人高清视频| 国产精品日韩精品| 久久亚洲精品小早川怜子66| 欧美在线视频一二三| 欧美另类精品xxxx孕妇| 久久久久久美女| 亚洲第一区中文99精品| 久久九九国产精品怡红院| 国产精品mp4| 成人a免费视频| 91性高湖久久久久久久久_久久99|