IT技术博客大学习 共学习 共进步

Eclipse Xtend对Java说:我帮你瘦身

外刊IT评论 2011-12-18 22:20:49 浏览 3,462 次

Java程序员在使用Ruby编程时会有一种解放的感觉,一种从Java那繁琐的语法环境进入一个无拘无束、自由国度的感觉。随着Clojure和Scala等新语言的出现,这种对比的感觉会越来越强烈。Ruby在很短的时间里异军突起,很大的原因在于它的简洁和自由,比如下面一句代码:

File.new(\"testfile\").each {|line| puts line[-1] }

如果用Java来写,不知道要写多少行。Bruce Tate在《七周七种语言》这本书中谴责Java说:“我的手指在流血,因为我不得不打出这样多的代码;我的眼睛在流血,因为我还要去读它们。”呵呵,说的很形象。

其实,Java并不是诚心在为难程序员,它一直在改进。而Eclipse基金会推出的一种叫做Xtend语言正是为了要简化Java的语法,减轻Java程序员的负担。

Xtend-logo

又一种新语言?不要担心。Xtend更像是一种模板语言。它紧密的和Eclipse IDE捆绑在一起,要使用它,你需要安装Eclipse的Xtend插件,Xtend代码并不是直接编译成JVM字节码的,当你在IDE编辑、保存Xtend代码时,它会自动的编译成相对应的Java代码。

xtend-and-java

在上图的右边窗口里,你可以检查生成的Java代码是不是符合你的预期,并可以通过它调试你的程序。

那Xtend究竟能帮助Java程序员做什么呢?面面俱到的介绍一种新语言是一种很复杂的事,我也不想考验各位的耐心。这里只举例说明几个大家一眼就能看出这种语言存在的价值的例子。

1.类型推测

在Java里很多的表达式中,根据语句的右边的代码完全可以推导出左边的类型,比如下面的Java语句:

//Java
List names = getTheListOfNames()

而在Xtend语言里,你就不必再声明左边的类型,直接写成:

val names = getTheListOfNames()

在for循环里可以写成这样:

for (name : getTheListOfNames())

2.对象属性访问方式的简化

在Java里,对象属性的访问一般都是借用set和get方法实现的,在Xtend里,你可以直接这样写:

person.name

而不需要写成:

person.getName()

赋值方法也是:

person.name = \"Foo\"

等同于

person.setName(\"Foo\")

还有一个特征很像Ruby里的用法,对于一个方法的调用,你可以写成这样:

obj.compute

而不需要写成:

obj.compute()

3. Switch 语句

这条我不说,估计大家也都会明白。Java里的switch语句只能接受数字或char类型的判断参数,而在Xtend里,没有这种限制:

val Shape shape = ...
switch (shape) {
  Rectangle case shape.width == shape.height :
     \"Square (\"+shape.width+\")\"
  Rectangle :
     \"Rectangle (\"+shape.width+\" x \"+shape.height+\")\"
  Circle :
     \"Circle (\"+shape.diameter+\")\"
  default :
  	 \"Don\'t know\"
}

4.模板表达式

在Xtend里,定义一个字符串,你可以写成这样:

val msg =  \'This is some multi line
          text with \"double quotes\" in it\'

请注意,这个字符串可以是多行的。
而在使用这个变量时, 你可以写成:

def print_line(String msg)\'\'\'
      <>
\'\'\'

变量直接嵌入文本里!很像PHP或Ruby里的写法。

5.闭包

我最后介绍的当然也是最强大的一个功能了,闭包。据说Java会在xxxx(xxxx <=3000)年之前加入闭包功能,不过你不用等了。我们来看看Xtend里如何实现闭包:

val predicate = [ Person person | \"Hans\" == person.name ]
persons.filter(predicate)

这个闭包是用来实现过滤persons集合里person.name=”Hans”的功能的。怎么样,有点函数式编程语言的感觉吧。

Xtend里还有很多的语言特征,这里就不一一叙述了,有兴趣的朋友可以阅读官方网站提供的HTML在线文档,或下载PDF版的文档

通过上面的介绍,你的Xtend的感觉如何?

建议继续学习

  1. Java程序员应该知道的10个eclipse调试技巧 (阅读 7,821)
  2. Java技术路线 (阅读 7,641)
  3. Eclipse开发Android应用程序入门:重装上阵 (阅读 6,304)
  4. Eclipse开发Android应用程序入门 (阅读 5,504)
  5. Java应用运维 (阅读 5,223)
  6. Eclipse快捷键问题 (阅读 4,145)
  7. Java陷阱(2010版) (阅读 4,001)
  8. Java 常量值修改后不起作用 (阅读 3,901)
  9. Java的那些事儿 (阅读 3,761)
  10. Java将Object对象转换为String的总结合集 (阅读 3,703)