eclipse ruby_使用用于Eclipse的Ruby开发工具插件

编者注 :要了解自撰写本文以来RDT的新增功能和更改内容,请阅读developerWorks文章“ Eclipse的简易Ruby开发 ”。

为什么是Ruby?

为什么任何自重的Java开发人员都会关心Ruby? Ruby是10年前在日本创建的通用脚本语言。 与流行的看法相反,它是一种纯面向对象的语言。 与Java技术不同,Ruby没有标量,因此一切(包括整数)都是一流的对象。 Ruby的语法大量借鉴了Smalltalk,Python和Ada。 像Java编程语言一样,Ruby是一种继承语言,但是它提供了Java技术不具备的一些高级功能,例如闭包(类固醇上的匿名内部类)和混入(类似于接口,但与它们的绑定不那么紧密)班上)。 Ruby还具有高度可移植性,可以在所有主要操作系统上运行。

Ruby现在也很火爆。 人们开始将其用于其擅长的应用程序类型。 由于它是经过解释的并且使用动态类型,因此您可以在运行时执行各种Java很难实现的魔术。 动态键入和表达语法所带来的令人惊讶的功能之一就是能够在Ruby中创建特定于域的语言,使您可以在更高的抽象级别上工作,而无需使用该语言的“原始”语法。 Ruby on Rails是一个用于创建由数据库支持的Web应用程序的框架,这表明了这种优雅。 Rake是Ruby的Make和Ant版本合二为一,是这种语言强大使用的另一个示例。

开始使用Ruby的另一个原因是所有很酷的孩子都在玩。 许多认识到Java技术在1996年将变得很重要的人(例如Glenn Vanderburg,Bruce Tate和Martin Fowler)现在都大量参与Ruby。 即使您不打算将所有开发工作都转移到Ruby,也许也该是您看看这种语言的时候了。

良好的开发环境(对于那些不想学习Emacs的人来说)是在Ruby中进行广泛开发的主要限制因素之一。 RDT改变了这一点。 有什么比您最喜欢的IDE Eclipse更好的试验Ruby的方法?

建立

在开始使用Ruby之前,您必须安装-或验证您已经拥有- Ruby解释器和库以及Ruby Development Environment。

获取Ruby

Ruby适用于所有主要平台-以及一些次要平台。 实际上,您的Linux®,Mac OS X或Cygwin发行版可能已经具有它。 转到命令提示符,然后键入ruby -v

如果获得版本号,就可以开始使用了。 如果没有,则需要安装Ruby。 查看您所选平台的发行版 。 安装很简单。 例如,要在基于Debian的Linux发行版(例如Ubuntu)上安装Ruby,请在命令行中输入以下内容: sudo apt-get install ruby rdoc irb libyaml-ruby libzlib-ruby ri libopenssl-ruby

如果您正在运行Windows®,那么这些选项也很容易。 RubyForge是SourceForge的特定于Ruby的等效物,它有一个名为One-Click Ruby Installer的项目,该程序可在Windows上设置Ruby环境(请参阅参考资料 )。 它还包括几个额外的工具,包括一个称为FreeRide的IDE,但是如果您使用的是RDT,则可以跳过设置中的大多数工具。

Mac OS X用户使用起来最简单:Apple Computer在Mac OS X的最新版本中包含Ruby。

获取文档

开始使用新语言时,文档和其他参考资料至关重要。 您可以在主要的Ruby网站上获得有关Ruby文档的在线参考,但是您会发现该文档有些过时了(它适用于Ruby V1.6,当前版本为1.8.2)。 问题是更新的文档尚未从日语翻译。 但是,您可以在Ruby-doc.org上找到良好的最新文档。 它包括API级别的文档(等效于Javadoc)以及一些教程和书籍。 (请参阅相关主题 。)

如果您对Ruby开发很认真,那么您应该以最快的速度运行,以获取Dave Thomas和Andy Hunt撰写的《 Ruby编程:实用程序员指南》 (请参阅参考资料 )。 这是Ruby的金标准介绍,也是Ruby库的要求。 在获得本书的同时,您也可以通过Dave Thomas的Ruby on Rails进行敏捷开发 ,这是Ruby on Rails的介绍。

获取RDT

现在,你有工作,您的计算机上的Ruby的记录版本,需要RDT(参见相关主题 )。 该Eclipse插件提供了许多您在编辑代码时已习惯的功能。 RDT是具有功能和插件的标准Eclipse插件,因此您可以将zip文件直接扩展到Eclipse文件夹中。 存档中的路径负责其余的工作。

编者注 :自从2005年写这篇文章以来,Ruby开发工具(RDT)插件的名称以及在哪里可以找到,但是基本功能和许可条款基本上保持不变。 RTD,现在称为Aptana RadRails V1.0.3,可从Aptana网站上获得。 要下载新版本或更新Eclipse插件,请遵循Aptana的RadRails指示,这对于Eclipse用户是很熟悉的。 请注意,如果您之前从未在Eclipse工作区中安装过Aptana插件,则应遵循Aptana 将Aptana插入现有Eclipse配置中的说明

现在您准备创建一个Ruby项目(参见图1)。

图1.创建一个新的Ruby项目
创建一个新的Ruby项目

与Java技术相比,Ruby对名称和目录结构的要求要严格得多。 在Ruby中创建项目实际上只是创建一个目录和一个.project文件(由于Ruby没有类路径,因此不需要.classpath文件)。 与Java技术的另一个显着区别是Ruby项目向导不会创建显式的srcbin目录。 Ruby被解释,因此没有输出文件夹。 如果您的项目很小,则可以将Ruby源文件放置在与项目文件相同的文件夹中。 或者,您可以创建自己的目录层次结构。 您会发现,Ruby对此的关心程度要比Java编程语言少得多。

接下来,您将需要一个Ruby源文件。 没有创建Ruby源文件的特定向导。 与Java技术相比,Ruby源文件所需的结构要少得多,因此要创建Ruby文件,请使用项目上的右键菜单创建一个新文件。

图2.创建一个Ruby源文件
创建一个Ruby源文件

不要忘记将.rb的标准扩展名.rb到文件中,这是常规的Ruby扩展名。 创建Ruby文件应打开Ruby透视图。

图3.创建一个Ruby源文件将启用Ruby透视图
创建Ruby源文件可启用Ruby透视图

Ruby透视图还具有大纲视图,类似于Java透视图提供的视图。 像Java副本一样,它允许您浏览Ruby源文件的元素。 在图4中,在大纲视图和源代码视图中都突出了raise_salary_by方法。

图4. Outline视图允许在源文件中导航
大纲视图允许在源文件中导航

就像其他复杂的插件一样,RDT还在“ 窗口”>“首选项”对话框中添加了自定义功能。 此首选项对话框出现在图5中。

图5. RDT安装用于定制的首选项
RDT安装用于自定义的首选项

首选项菜单项允许您更改语法突出显示,格式设置(Ruby世界中的标准缩进是两个空格,而不是四个空格,因此准备进行一些调整)和语法突出显示。 它还允许您自定义编辑器模板并选择您的解释器。

RDT编辑器

在Java技术世界中,我们已经习惯了高级编辑器功能,这些功能使其很难迁移到其他不提供相同支持的环境中。 Ruby IDE缺少的功能之一是Content Assist,它为标识符提供了上下文相关的查找。 RDT编辑器具有用于Ruby代码的Content Assist。

图6. RDT编辑器提供Content Assist
RDT编辑器提供Content Assist

由于Ruby是动态类型的,因此RDT编辑器中的Content Assist比Java世界中的特定性要低。 您不能将类型分配给Ruby中的变量或方法返回。 标识符上下文确定运行时的类型。 Ruby使用被亲切地称为“鸭子类型”的东西-如果它​​接受“嘎嘎”消息,那么它一定是鸭子。 对于那些习惯于强类型语言的人来说,这似乎是一个障碍,但是这种松散类型的耦合使Ruby语言具有一些更强大的功能。 例如,您可以在Ruby中编写一个异常处理程序,该异常处理程序在调用不存在的方法时触发,并且异常处理程序可以动态合成该方法并转过来调用它。 在强类型语言中,这种元编程水平很难。

Content Assist的赎回功能之一是Ruby用于标识符的特殊命名约定。 例如,在Ruby中,所有成员变量在首次使用时都会存在,并且都用@符号标识为该名称的第一个字符。 如果要使用Content Assist查找成员变量,则可以从键入@开始,然后仅查看成员变量。

图7. Ruby帮助中的命名约定Content Assist
Ruby帮助中的命名约定Content Assist

动态类型仍然阻碍Ruby中的上下文敏感性。 在图7中,唯一的合法成员变量是出现正上方的方法声明,即的那些@name@salary ,和@hire_year 。 Content Assist正在获取的其他成员变量来自稍后定义的另一个类。 RDT编辑器还不够完善,无法过滤所有语法正确但语义错误的条目。

运行和调试

IDE的主要功能之一是能够运行和调试从同一环境中构建的应用程序。 RDT支持这两种功能。

指定口译员

Ruby是一种解释型语言,因此您必须将解释器与您的环境相关联,然后RDT才能运行或调试您的应用程序。 该关联位于Ruby标题和Installed Interpreters条目下的Windows> Preferences对话框中。

图8.将Ruby解释器与环境相关联
将Ruby解释器与环境相关联

您将“位置”文本字段指向正在使用的Ruby版本的bin目录。 RDT收集其余所需的信息。 关联了解释器后,就可以运行应用程序了。

运行Ruby应用程序

运行Ruby应用程序实际上与运行Java应用程序相同。 您可以使用“运行”菜单创建“运行”配置。

图9.在RDT中设置运行配置
在RDT中设置运行配置

当您运行该应用程序时,RDT将使用Ruby解释器,并在Eclipse工作区底部的控制台窗口中运行该应用程序。

图10.在RDT中运行Ruby应用程序
在RDT中运行Ruby应用程序

此示例显示了运行控制台应用程序,但是运行其他类型的应用程序(例如图形应用程序)的工作方式相同。

使用RDT进行调试

IDE所需的最关键的功能之一是能够有效调试应用程序。 Ruby解释器包括一个命令行调试器,但是谁愿意在这个图形工具时代使用命令行调试器呢? 幸运的是,Ruby解释器还通过特定的(可配置的)端口广播调试信息,RDT之类的工具可以侦听该端口并提供开发人员期望的调试类型。

要在RDT中调试Ruby应用程序,请像上面创建的Run配置一样创建Debug配置。 然后,您可以通过单击左侧边距中的装订线来设置断点,并使用调试器启动应用程序。 与Java技术一样,IDE会询问您是否要切换到“调试”透视图。 完成后,您将看到类似以下内容:

图11.在RDT中调试Ruby应用程序
在RDT中调试Ruby应用程序

RDT中出现了与Java技术相同级别的调试支持。 左上方的窗格显示了当前正在执行的线程。 右上方的窗格显示变量的值。 与Java编程语言一样,您可以深入对象以查看其基础成员变量值。 左中间的窗格显示了正在运行的应用程序的源代码,右中间的窗格显示了大纲视图(在此处与编辑器一样工作,允许您通过单击标识符进行导航)。 调试窗口的底部显示Ruby解释器在端口1098上广播调试信息,而RDT在该端口上侦听调试信息。

调试支持是RDT的关键功能。 即使您的编辑器具有对Ruby的出色支持,您仍然必须依靠命令行调试器来调试应用程序。 拥有功能齐全的调试器可大大提高生产率。

测验

动态类型是Java开发人员最难接受的Ruby特性之一。 如果您习惯使用强类型语言,则动态类型似乎是朝无政府状态迈出的一步。 动态类型允许使用强类型语言很难或不可能的各种高级元编程技巧。 当然,您也放弃了编译时类型检查的安全网。 有没有办法做到两全其美?

单元测试对于语言应该是强制性的,但是在动态语言中尤其重要。 单元测试所揭示的不仅仅是编译。 实际上,您应该改变对单元测试和编译之间关系的看法。 最近,在No Fluff的Just Stuff软件研讨会的专家小组中,对软件开发有深入研究的Stuart Halloway(来自Relevance,LLC)说:“五年后,我们将把编译视为一种非常弱小的单元形式。测试。” 单元测试可以验证代码是否符合预期,而不仅仅是拼写检查您的键入内容。

鉴于单元测试在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. RDT包含一个Test::Unit Run配置
RDT包含一个Test :: Unit Run配置

运行此测试时,您将获得与Java单元测试相同的支持元素,包括左下角的类似JUnit的窗格。

图13.在IDE中运行的单元测试的示例
在IDE中运行单元测试的示例

您也可以在Ruby中创建TestSuite。 TestSuite是Ruby类,用于定义返回TestSuite的套件方法。 TestSuite包含在每个TestCases中自动定义的套件。 清单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的示例不同,该套件作为独立应用程序运行。 Ruby包括两种显示TestSuite结果的方法。 第一个是控制台测试运行器,它在控制台上输出其结果。 第二个是Tk TestRunner,它创建一个熟悉的对话框来显示测试结果。 Tk TestSuite对话框出现在图14中。

图14.图形化的TestSuite对话框
图形化的“ TestSuite”对话框

接下来会发生什么?

当前版本的RDT为0.50。 它的开发人员正在努力开发下一个版本:0.60。 计划在下一个版本中进行的改进包括:

  • 代码折叠 -可以为类和方法启用折叠。
  • 大纲视图 —更详细,支持局部变量。
  • RI视图 —从RDT视图使用Ruby的ri实用程序。
  • 任务标签 -为Ruby注释中的可配置关键字(如TODO,FIXME)创建任务。
  • 编辑器的改进 -自动完成括号,括号和单/双引号; 更好的代码辅助。
  • 检查快捷方式 —用于在Debug会话期间频繁使用检查的可配置快捷方式,例如显示对象的所有方法,全局常量等。

下一个版本将更好地利用JRuby字节码编译器。 JRuby是一个允许Ruby代码编译为Java字节码的项目。 这意味着RDT的下一版本将更易于集成到Eclipse世界中,从而提供更好的支持。

摘要

《 实用程序员:从旅人到硕士》这本书中的一个伟大建议之一是,您应该每年学习一种新的编程语言,以保持自己的最新状态,并让新语言教给您有关您每天使用的一种编程语言的知识。 由于Ruby on Rails项目的成功,Ruby终于达到了普遍存在的转折点。 现在是时候将Ruby添加到您的工具库中了。 RDT是在已知房屋中保持脚部湿润的好方法。


翻译自: https://www.ibm.com/developerworks/java/library/os-rubyeclipse/index.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值