一、 為什么使用Ruby?現在,為什么眾多的java開發者都關注Ruby?Ruby,是10年以前在日本創建的一種通用目的腳本語言,這是一種純面向對象的語言。不同于Java技術,Ruby中的一切都是對象。Ruby的語法主要來源于Smalltalk,Python和Ada。象Java編程語言一樣,Ruby是一種單繼續的語言,但是它提供了一些Java技術所沒有實現的高級特征,例如閉合(可以認為是一種匿名的內部類)和mix-in(類似于接口,但是較松地綁定于類上)。Ruby也是高度可移植的,能夠運行在所有主流的操作系統之上。現在,Ruby正十分熱門。人們正在開始把它應用于各種類型的應用程序。因為它是解釋型并且使用動態類型化,所以你可以在運行時刻實現在Java中很難實現的技巧。由動態類型化和富于表達的語法所實現的令人吃驚的能力之一是它能夠用Ruby創建域特定的語言(DSL)-它們答應你在更高級別的抽象層上工作,從而遠離最原始的語言語法。Ruby on Rails是一種創建基于數據庫支持的Web應用程序的框架,這也展示了Ruby的力量。Rake,作為Ruby的Make和Ant合二為一的版本,是這種語言強有力的應用的又一個證實。使用Ruby的另一個原因是,所有的編程發燒友都在使用它。現在,許多Java高手(如Glenn Vanderburg,BrUCe Tate和Martin Fowler)都在使用Ruby。即使你不打算把你的所有開發轉向Ruby,這種語言也值得你瀏覽一番。限制Ruby發展的主要因素之一是,它缺乏一個良好的開發環境(對于那些不想學習Emacs的用戶來說)。如今,RDT改變了這一切,而使用Eclipse對此進行試驗則最好不過。二、 安裝在使用Ruby之前,你必須安裝Ruby解釋器,相應的庫和Ruby開發環境。三、 取得RubyRuby可用于所有主要的平臺上。事實上,你的linux或Cygwin分發包中可能已經包含了它。請打開一個命令提示符,然后輸入"Ruby-v"。
假如你得到一個版本號,那么你已經預備好。否則,你需要檢查你所選擇的平臺的分發包。假如你正在運行Windows,則選擇更輕易。RubyForge,作為SourceForge上的Ruby特定的等價物,有一個工程稱為One-Click Ruby Installer,這個程序用于在Windows平臺上搭建Ruby環境。它還包括另外一些工具,如一個稱為FreeRide的IDE;但是假如你使用RDT的話,你在安裝過程中可以跳過這些這項。四、 取得文檔當你開始使用一種新語言時,文檔及有關參考材料是至關重要的。你可以在主Ruby網站得到Ruby文檔的在線參考材料,但是你會發現這些文檔有點過時(它們是針對于Ruby 1.6版本的,而當前版本是1.8.2)。問題是,更新的文檔目前還沒有從日語翻譯過來。然而,你可以在Ruby-doc.org上找到最新的幫助文檔。它包括API級的文檔(Javadoc的等價物),還有其它一些教程和書籍。假如你是一位嚴厲的Ruby開發者,那么你應該閱讀一下《PRogramming Ruby:The Pragmatic Programmer's Guide》(作者是Dave Thomas和Andy Hunt)一書以取得最佳編程效果。這是一本有關Ruby及Ruby庫編程的經典指南。假如你得到此書,那么你還可以參考也是Dave Thomas編寫的《Agile Development with Ruby on Rails》一書。這是一本有關Ruby on Rails的入門性書籍。五、 得到RDT
作為Java開發者最難實現的Ruby特征之一是動態類型化。假如你習慣于一種強類型化語言,那么動態類型化看上去似乎有點混亂。DT答應各種高級元編程技巧-這在一種強類型化語言中是很難或不可能實現的。當然,你可以放棄編譯時刻類型檢查的安全設置。那么,是否有一個方法能夠實現兩種世界的最佳結合呢?單元測試應該是每一種語言必須實現的,但是它在動態語言中非凡要害。單元測試比編譯揭示了更多的內容。事實上,你應該改變在單元測試和編譯之間的關系上的觀點。最近,一位高級軟件開發專家認為,"在今后的五年內,我們會把編譯作為單元測試的一種弱的實現形式"。單元測試能夠提供證實(verification)-編碼將如期實現,而不是僅僅進行你輸入內容的語法檢查。考慮到單元測試在Ruby世界中的極端重要性,你一定會希望RDT能夠使得單元測試易于運行。的確如此!單元測試被包括在Ruby內,因此你不必下載任何其它的擴展。Ruby庫中包括了一個TestCase類和一個TestSuite的概念。你可以象創建任何另外的Ruby類一樣來創建你的單元測試,從Test::Unit::TestCase中子類化你的測試。列表1是一個Employee類的實例。列表1.Employee類 > class Employee
def initialize(name, salary, hire_year)
@name = name
@salary = salary
@hire_year = hire_year
end
attr_reader :name, :salary, :hire_year
def raise_salary_by(perc)
@salary += (@salary * (perc * 0.01))
end
def to_s
"Name is #{@name}, salary is #{@salary}, " + "hire year is #{@hire_year}"
不同于前面運行單個TestCase的實例,這里的suite作為一獨立的應用程序運行。Ruby有兩個方法可以顯示TestSuite的結果。第一個是"Console Test Runner"-它在控制臺輸出它的結果。第二個是"Tk TestRunner",它創建一個熟悉的對話框來顯示測試的結果。圖14顯示了一個Tk TestSuite對話框。