這篇文章,我希望能夠和你一起分享我在開發java系統的時候使用Ruby的那種興奮感。我比較一下Java和Ruby的優點和缺點,而且介紹一下JRuby解釋器的支持者和反對者...
利用動態腳本編寫你的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,使其能夠更好地使用動態元程序語言的彈性、表現方式以及功能。
版權聲明:任何獲得Matrix授權的網站,轉載時請務必保留以下作者信息和鏈接
作者:silentbalanceyh;
原文:http://www.matrix.org.cn/resource/article/2006-11-24/Ruby_34bd6112-7b53-11db-99a3-db2d065e2044.Html
要害字:Ruby;JRuby
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)
新聞熱點
疑難解答