最近在做一个网站时大量使用了xtend,感觉非常好。今年5月推出的xtend 2.3,提供了很多很好(也很基础)的功能,比如定义property、把对property的引用转化为对getter/setter的引用等,再加上它已有的“扩展方法”和“闭包”,用起来就很舒服了。
xtend号称java界的coffeescript。当我们写下xtend代码时,编译器会把它翻译成可读性很高的java源代码,注意是“源代码”,而不是“字节码”。相比jvm上的其它语言如scala等,这是一个巨大的优势:只要是用java的地方,都可以用xtend代替,而不需要处理额外的如编译等问题。这样对于我们来说,写下的是简洁清楚的xtend代码,而对系统或框架来说,它们看到的还是java源代码,皆大欢喜。
正因为有了xtend,让我对一些java框架也不像之前那么排斥了,比如play2-java。play1中大量利用了annotation和javassist来突破java语法的限制,让我们编码时轻松一些,受到了广大java程序员的欢迎。而play2认为play1中魔术太多,去掉了一些魔术,但代码写起来要啰嗦一些。也因此,用play2的人都会半逼迫着去学习scala(或退回到play1),但scala与java库之间的不匹配,有时候会造成很多问题,让人很郁闷。同时因为scala语言本身的难度,用起来很坎坷,所以我一度对play2的未来充满了怀疑。
但现在有了xtend,情况立马变得不同。使用xtend+play2-java,既能保持所有java的优势,又能让代码写起来不那么痛苦。以前需要用annotation来简化的操作,通过xtend定义一些DSL,写起来既简单又易调试。以前用得顺手的java库,现在继续能用,而且还更容易了。再加上xtend学习成本很低,几个小时就能掌握,这的确是相当大的吸引力。
xtend中这几个功能相当好用:
据说xtend现在正在实现一个很大的功能,叫annotation custom processing,类似于macro的功能。能让我们控制生成的java代码,实现一些更强大的功能。非常期待这个功能,不过不知道什么时候才会推出。
现在xtend中还有这样的一些小问题:
不过这些问题现在都能绕过,不是大问题。期待下一版的改进。
最后的感言就是:学了scala一年多,但实际用在项目中有各种痛苦,效率提不上去,最后放弃。而xtend仅仅几个小时,就能让我感受到了效率的提高,非常感谢。Xtend才是真正的better java。