麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

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

在咖啡里加糖 論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工具在這些功能上存在限制,它缺乏類型信息所以不能夠完成上邊這些工作。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国内精品久久久久久影视8 嫩草影院在线观看网站成人 | 久草视频在线看 | av成人在线免费观看 | 777午夜精品视频在线播放 | 91www成人久久 | 日日操夜| 国产亚洲精品久久午夜玫瑰园 | www.91视频com | 亚洲精品无码不卡在线播放he | 性高跟鞋xxxxhd4kvideos | 国产91porn| 久久久久亚洲国产精品 | 久久激情国产 | 99热高清| 成人午夜视频在线观看 | 成人一级黄色 | 国产免费成人 | 免费h片| 欧美成人精品欧美一级乱黄 | 最新欧美精品一区二区三区 | 国产99久久久久久免费看 | 日韩黄色片免费看 | 色综合久久久久久久久久久 | 日韩每日更新 | 精品久久久91 | 色的综合 | 日日夜av | 少妇一级淫片免费放4p | 九九热在线视频免费观看 | 性欧美极品xxxx欧美一区二区 | 91精品国产综合久久婷婷香 | 亚州综合图片 | 男女做性免费网站 | 九九热视频这里只有精品 | 亚洲日色| 国产免费成人在线 | 中文字幕欧美专区 | 99在线免费观看视频 | 国产精品一品二区三区四区18 | 欧美久久久一区二区三区 | 日本道中文字幕 |