一、 为什么使用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对话框。