欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-04-23 08:36:39
...

编者注 :要了解自撰写本文以来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项目
eclipse ruby_使用用于Eclipse的Ruby开发工具插件

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

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

图2.创建一个Ruby源文件
eclipse ruby_使用用于Eclipse的Ruby开发工具插件

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

图3.创建一个Ruby源文件将启用Ruby透视图
eclipse ruby_使用用于Eclipse的Ruby开发工具插件

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

图4. Outline视图允许在源文件中导航
eclipse ruby_使用用于Eclipse的Ruby开发工具插件

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

图5. RDT安装用于定制的首选项
eclipse ruby_使用用于Eclipse的Ruby开发工具插件

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

RDT编辑器

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

图6. RDT编辑器提供Content Assist
eclipse ruby_使用用于Eclipse的Ruby开发工具插件

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

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

图7. Ruby帮助中的命名约定Content Assist
eclipse ruby_使用用于Eclipse的Ruby开发工具插件

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

运行和调试

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

指定口译员

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

图8.将Ruby解释器与环境相关联
eclipse ruby_使用用于Eclipse的Ruby开发工具插件

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

运行Ruby应用程序

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

图9.在RDT中设置运行配置
eclipse ruby_使用用于Eclipse的Ruby开发工具插件

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

图10.在RDT中运行Ruby应用程序
eclipse ruby_使用用于Eclipse的Ruby开发工具插件

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

使用RDT进行调试

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

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

图11.在RDT中调试Ruby应用程序
eclipse ruby_使用用于Eclipse的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配置
eclipse ruby_使用用于Eclipse的Ruby开发工具插件

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

图13.在IDE中运行的单元测试的示例
eclipse ruby_使用用于Eclipse的Ruby开发工具插件

您也可以在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对话框
eclipse ruby_使用用于Eclipse的Ruby开发工具插件

接下来会发生什么?

当前版本的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/opensource/library/os-rubyeclipse/index.html