内容摘要:Groovy,针对JVM的类Java动态语言,主要增强了对于Java 5特征的支持,包括注解、泛型和枚举,框架包括Spring,Hibernate,JPA,Goole Guice或者TestNG。
首先,在Groovy中命名参数看起来是这样的:
fund.compare(to: benchmarkFund, in: euros)
compare(fund: someFund, to: benchmark, in: euros)
通过向数字加入新的属性 —— 这在Groovy中是可能的,但是超出了这篇文章的范围 —— 我们可以写出像这样的代码:
monster.move(left: 3.meters, at: 5.mph)
现在通过忽略圆括号,代码变得更清晰了:
fund.compare to: benchmarkFund, in: euros
compare fund: someFund, to: benchmark, in: euros
monster.move left: 3.meters, at: 5.mph
显然,这没有很大的区别,但是每个语句变得更接近浅白的英语句子,而且在宿主语言中删除了通常冗余的技术代码。Groovy语言这个小小的增强给予了商业DSL设计人员更多的选择。
改善的工具支持
当Groovy还不成熟的时候,一个常见的弱点是缺乏好的工具支持:工具系列和IDE支持都不到位。幸运的是,随着Groovy和Grails web框架的成熟和成功,这种状况得到了改变。
“联合”编译器的介绍
Groovy以它与Java的透明而且无缝的集成而闻名。但是这不仅仅意味着在Groovy脚本中可以调用Java方法,不,两个语言之间的集成远不止于此。例如,一个Groovy类继承一个Java类,而该Java类实现一个Groovy接口是完全可能的,反之亦然。不幸的是,其他候选语言不支持这样做。然而,到目前为止,当把Groovy和Java混合起来使用的时候,你在编译时要小心选择正确的编译顺序,如果两个语言中出现循环依赖,那么你也许会碰到一个“鸡与蛋”的问题。幸运的是在Groovy 1.5中这不再是问题,谢谢获奖的Java IDE IntelliJ IDEA的创建者JetBrains的一个贡献,你可以使用一个“联合”编译器将Groovy和Java代码放在一起一次编译而不必考虑类之间的依赖关系。
来源:InfoQ中文站 作者:曹云飞 责编:豆豆技术应用