簡介 本文介紹如何在eclipse中使用ruby開發工具(rdt)插件進行ruby開發。本文將有益于那些想學習如何使用eclipse基礎架構來進行ruby開發的ruby開發者,也有益于對ruby開發感興趣的java開發者。
一、 為什么使用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開發環境。
三、 取得ruby
ruby可用于所有主要的平臺上。事實上,你的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
現在,既然你在自己的計算機上安裝了一個可工作的具有良好幫助文檔的ruby,那么接下來你需要安裝rdt了。這是一個eclipse插件,它提供了許多你可能在編輯代碼時已習慣的特征。rdt是一個標準的eclipse插件;因此,你可以直接把壓縮文件解壓到eclipse文件夾下,由文檔中的路徑來處理其它一切。
現在,你已經準備好創建一個ruby工程了(見圖1)。
![]() 圖1.創建一個新的ruby工程 |
![]() 圖2.創建一個ruby源文件 |
![]() 圖3.創建一個ruby文件將啟動ruby視圖 |
![]() 圖4.這個outline視圖實現在源文件中的導航 |
![]() 圖5.rdt安裝"preferences"以便實現定制 |
![]() 圖6.rdt編輯器提供了內容助手 |
![]() 圖7.在ruby幫助內容助手中的命名慣例 |
七、 運行與調試
ide的特色之一是在同一個環境下運行和調試你構建的應用程序。rdt能夠啟用這兩項功能。
八、 指定一個解釋器
這一任務的實現位于ruby上部和"installed interpreters"入口的"windows>preferences"對話框中。
ruby是一種解釋性的語言,因此,在rdt能夠運行或調試你的應用程序之前,你必須把一個解釋器與你的環境關聯。這種關聯位于ruby頂部的"windows>preferences"對話框中的"installed interpreters"入口處。
![]() 圖8.把一個ruby解釋器與環境相關聯 |
![]() 圖9.在rdt中建立一個run配置 |
![]() 圖10.在rdt內運行一個ruby應用程序 |
![]() 圖11.在rdt中調試ruby應用程序 |
十一、 測試
作為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}" end end |
require 'test/unit/testcase' require 'test/unit/autorunner' require 'hr' class testemployee < test::unit::testcase @@test_salary = 2500 def setup @emp = employee.new("homer", @@test_salary, 2003) end def test_raise_salary @emp.raise_salary_by(10) expected = (@@test_salary * 0.10) + @@test_salary assert( expected == @emp.salary) end end |
![]() 圖12.rdt包括一個test::unit run配置 |
![]() 圖13.運行于ide中的一個單元測試的例子 |
require 'test/unit/testsuite' require 'test/unit/ui/tk/testrunner' require 'test/unit/ui/console/testrunner' require 'testemployee' require 'testmanager' class testsuite_alltests def self.suite suite = test::unit::testsuite.new("hr tests") suite << testemployee.suite suite << testmanager.suite return suite end end #test::unit::ui::tk::testrunner.run(testsuite_alltests) test::unit::ui::console::testrunner.run(testsuite_alltests) |
![]() 圖14.圖形式的testsuite對話框 |
新聞熱點
疑難解答
圖片精選