a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > Ruby > 正文

使用Eclipse+RDT插件進行Ruby開發

2024-07-21 02:14:42
字體:
來源:轉載
供稿:網友

  簡介 本文介紹如何在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工程

  與java相比,ruby在命名和目錄結構方面要求并不嚴格。在ruby中創建一個工程實際上只創建一個目錄和一個工程文件(不需要.classpath文件,因為ruby沒有classpath)。另外一個與java技術的顯著區別是,ruby工程向導并不創建顯式的src和bin目錄。ruby是解釋型的,因此沒有輸出文件夾。如果你有一個小工程,那么你可以把ruby源文件放在與工程文件相同的文件夾下。作為選擇,你還可以創建你自己的目錄層次。你會發現,與java相比,ruby很少關心這些。

  接下來,你將創建一個ruby源文件。沒有特定的向導用于創建一個ruby源文件。與java技術相比,ruby源文件中僅需要較少的結構,所以,為了創建一個ruby文件,你需要右擊工程來創建一個新文件(見下圖2)。


圖2.創建一個ruby源文件

  別忘記把標準擴展名.rb添加到該文件(它是正常的ruby擴展名)。創建一個ruby文件應該會打開如圖3所示的ruby視圖。


圖3.創建一個ruby文件將啟動ruby視圖

  ruby還提供了一個outline視圖(類似于java提供的那種)。就象它的java對應物一樣,它允許你在ruby源文件的元素之間進行導航。在圖4中,raise_salary_by方法在outline和源碼視圖中都被加亮。


圖4.這個outline視圖實現在源文件中的導航

  就象其它復雜的插件一樣,rdt也允許通過"window>preferences"對話框增加定制特征。這個定制對話框見圖5。


圖5.rdt安裝"preferences"以便實現定制

  參數選擇"preferences"菜單項允許你改變語法加亮,格式化(ruby世界中的標準縮進是兩個空格,而不是四個空格,所以請準備好作一些調整),等等。它還允許你定制編輯器模板并選擇你自己的解釋器。

  六、 rdt編輯器

  在java世界中,我們已習慣于高級編輯器特征-這使得在轉到其它不提供同樣支持的其它環境時比較困難。ruby ide中所缺乏的特征之一是沒有提供內容助手(它能夠提供上下文相關的標識符查找功能)。幸好,rdt編輯器中含有針對ruby代碼的內容助手,見下圖6。


圖6.rdt編輯器提供了內容助手

  在ruby中,你不能把一種類型賦值給一個變量或一個方法的返回,而由標識符上下文確定在運行時刻的類型。ruby中引入了一種被親切地稱為"duck typing"的方法。這種方法的思想是,如果它接受一個假(quack)消息,那么它必須是一個"duck"。這看起來似乎妨礙了那些已經習慣了強類型化語言的用戶,這種松散類型耦合能夠支持ruby語言中一些更強有力的特征。例如,你可以用ruby編寫一個異常處理器-當你調用一個并不存在的方法時激活它,然后由該異常處理處理器來自由分析這個方法,然后再調用它。這種元編程級在強類型化語言中是很難實現的。

  針對內容助手的一個挽回特征是,ruby在使用標識符時使用特定的命名慣例。例如,在ruby中,所有的成員變量在第一次使用它們時就存在,并且全部由一個@符號所標識,作為其名字的第一個字符。如果你使用內容助手查找成員變量,那么你可以輸入@,這樣以來你就只能看見成員變量了。


圖7.在ruby幫助內容助手中的命名慣例

  動態類型化仍然妨礙在ruby中的上下文敏感問題。在圖7中,唯一有效的成員變量是正好出現在方法聲明上面的那些,也就是@name,@salary和@hire_year。內容助手所提供的另外一些成員來自于另一個類(后面定義)。目前,rdt編輯器還不足夠復雜以過濾所有的正確語法但語義上不正確的入口。

  七、 運行與調試

  ide的特色之一是在同一個環境下運行和調試你構建的應用程序。rdt能夠啟用這兩項功能。

  八、 指定一個解釋器

  這一任務的實現位于ruby上部和"installed interpreters"入口的"windows>preferences"對話框中。
ruby是一種解釋性的語言,因此,在rdt能夠運行或調試你的應用程序之前,你必須把一個解釋器與你的環境關聯。這種關聯位于ruby頂部的"windows>preferences"對話框中的"installed interpreters"入口處。


圖8.把一個ruby解釋器與環境相關聯

  對于你正在使用的ruby版本,你要把"location"文本域指向bin目錄,之后由rdt來選取所有其它所需要的信息。一旦你關聯了解釋器,那么你就為運行應用程序作好了準備。

  九、 運行ruby應用程序

  運行一個ruby應用程序實際上類似于運行一個java應用程序。你可以使用run菜單來創建一個run配置,見下圖9。


圖9.在rdt中建立一個run配置

  當你運行應用程序時,rdt將把控制切換到ruby解釋器,然后在eclipse工作區底部的控制臺窗口內運行應用程序,見下圖10。


圖10.在rdt內運行一個ruby應用程序

  這個實例顯示了運行一個控制臺應用程序,但是運行其它類型的應用程序(如gui程序)的方式與此相同。

  十、 用rdt調試

  一個ide要求實現的最關鍵的特征之一是有效地調試你的應用程序的能力。ruby解釋器包括一個命令行調試器,但是,在如今的圖形工具時代有誰會使用一個命令行調試器?幸好,ruby解釋器還通過一特定(可配置)端口來廣播其調試信息,而就象rdt這樣的工具能夠聽取該端口并且提供開發者們期望的調試支持類型。

  為了在rdt中調試一個ruby應用程序,我們要象上面創建的run配置一樣創建一個debug配置。然后,你可以通過點擊左邊的溝槽設置一個斷點并使用調試器來啟動應用程序。就象在java技術中一樣,ide將詢問你,是否你想要切換到調試視圖下。如果你愿意,則你將看見類似下面圖11所示的內容:


圖11.在rdt中調試ruby應用程序

  rdt中支持與java技術調試相同的調試級別。左上邊的格子顯示出當前執行的線程,右上面的格子顯示出變量的值。就象在java編程語言中一樣,你可以進一步分析對象以觀看它們內在的成員變量值。中間左邊的格子顯示當前正運行的應用程序的源代碼,中間右邊的格子顯示outline視圖-它在這里擔當編輯器的作用,允許你通過點按一個標識符來進行導航。debug窗口的底部顯示出ruby解釋器在端口1098上廣播的調試信息,而由rdt在該端口上聽取調試信息。

  調試器支持是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

  相應的單元測試如下:

  列表2.相應于employee類的單元測試

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

  為了運行這個單元測試,你可以為該單元測試類創建一個run配置-作為一個test::unit類型,見圖12。


圖12.rdt包括一個test::unit run配置

  當你運行這個測試時,你會得到與java單元測試相同的支持元素,包括在左下角的類junit格子。


圖13.運行于ide中的一個單元測試的例子

  你還可以在ruby中創建testsuites。testsuites是ruby類,它定義一個返回testsuite的suite方法。這個testsuite由自動地在每個testcases中定義的suite組成。列表3是針對幾個類的一個示例testsuite。

  列表3.一些類的示例testsuite

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)

  不同于前面運行單個testcase的實例,這里的suite作為一獨立的應用程序運行。ruby有兩個方法可以顯示testsuite的結果。第一個是"console test runner"-它在控制臺輸出它的結果。第二個是"tk testrunner",它創建一個熟悉的對話框來顯示測試的結果。圖14顯示了一個tk testsuite對話框。


圖14.圖形式的testsuite對話框

  十二、 新版本中的改進

  rdt的當前版本是0.50。目前,其開發者正在開發0.60版本。下一個版本中將改進的方面包括:

  · 代碼折疊功能-提供針對類和方法的代碼折疊功能。

  · outline視圖-提供更詳細的信息,包括對局部變量的支持。

  · ri視圖-從一個rdt視圖中使用ruby的ri工具。

  · 任務標簽-以ruby注釋形式為可配置的關鍵字(如todo,fixme)創建任務。

  · 編輯器方面的改進-自動添加大括號,圓括號和單/雙引號;還有更好的代碼助手。

  · 檢查器快捷方式-在一個調試會話期間,針對經常使用的檢查器提供可配置的快捷方式,如顯示一個對象的所有方法,全局常量,等等。

  接下來的版本將更好地使用jruby字節碼編譯器。jruby是一項工程,它允許把ruby代碼編譯為java字節碼。這意味著,rdt的以后版本將更容易地加入到eclipse世界中,甚至提供更好的支持。

   十三、 總結

  ruby最終為業界人士所廣泛認可和應用。其中,部分原因應該歸功于ruby on rails工程的成功的驅動。如今,已經到了考慮如何把ruby加入到你的"競爭工具箱"中的時候了。當然,rdt也是吸引你加入這一領域的一個重要因素。



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 欧美亚洲视频在线观看 | 亚洲日本在线观看 | 欧美一级黄色片 | 亚洲电影在线观看 | 久久久美女 | 日韩啊啊啊| 日韩中文字幕在线免费 | 免费不卡视频在线观看 | 日韩一区二区三区四区五区六区 | 欧美一区二区免费 | 国内精品久久久久久久97牛牛 | 欧美一级在线观看 | 日韩精品视频在线免费观看 | 久久女同互慰一区二区三区 | 97在线免费观看 | 超碰青青青 | 91亚洲国产成人久久精品网站 | 四虎影视最新网址 | 黄色免费影视 | 中文字幕一区二区三区四区 | 久久国产一区二区 | 成年人在线观看 | 韩国三级中文字幕hd久久精品 | 国产精品大全 | 欧美日韩视频 | 国产极品一区二区三区 | 四虎地址| 国产成人午夜 | 久久精品视频久久 | h肉动漫无修一区二区无遮av | 亚洲综合在线一区 | 青娱乐国产在线 | 影音先锋在线看片资源 | 欧美精品免费在线 | 午夜大片网 | 一区二区三区影视 | 国产精品一区二区免费视频 | 成人免费在线电影 | 亚洲日本国产 | 黄色毛片av | 成人免费观看网址 |