没有Rails Java程序员如何使用Ruby

http://tech.ddvip.com   2008年01月18日    社区交流

内容摘要:Ruby on Rails仅是使Ruby成为伟大的一个因素,这就象EJB仅是Java企业平台的一个组成部分一样。本文将带你一同讨论,作为一名Java开发者,仅利用Ruby自身所能够实现的功能。

  列表9实质上展示了用Java语言实现的同一行代码(来自于Word的构造器中,见列表1):

  列表9.前面Ruby的每个方法都类似Java的迭代算子

for(Iterator iter = definitions.iterator(); iter.hasNext();){
this.validateRelationship((Definition)iter.next());
}

  现在,我要承认Java 5的针对于for循环语法的泛型和new比列表9中要简洁得多。Ruby支持我们熟悉的Java中的循环结构,如for和while;实际上,在Ruby中,它们是很少使用的,因为在Ruby中的大多数东西都支持迭代的概念。例如,在列表10中,你会看到实现对于一个文件内容的迭代是多么容易:

  列表10.迭代变得非常简单

count = 0
File.open("./src/dictionary.rb").each { |loc| puts "#{count += 1}:" + loc }

  Ruby中的支持each方法的任何类(如File)都可以让你用这样方式进行迭代。顺便说一下,Ruby的puts方法(见列表10)与Java语言中的System.out.println一样。

  十、条件语句

  现在,让我们仔细地分析一下在列表3中的Word类中的一个条件语句。在列表11中,我列出了add_definition()方法的代码:

  列表11.巧妙的条件表达

def add_definition(definition)
definition.word = self if definition.word != self
@definitions << definition
end

  请仔细观察在第二行中的代码,看一下if语句是怎样跟随表达式的。你当然可以以正常方式书写它(由列表12所示),但是是否列表11更好些?

  列表12.使用多种方式来表达一个条件

def add_definition(definition)
if definition.word != self
definition.word = self
end
@definitions << definition
end

  在Java语言中,如果条件语句体只占一行,那么你可以删除大括号。在Ruby中,如果条件语句体只占一行,那么你可以编写象列表11所示的表达式。还要注意,同一样的条件也可以表达为"definition.word = self unless definition.word == self",在此使用了Ruby的"unless"特征。效果如何?

责编:豆豆技术应用

正在加载评论...