Groovy是连接脚本语言和企业级Java世界的桥梁 二

       Groovy是连接脚本语言和企业级Java世界的桥梁 二

 

 

 

IndicThreads >> Groovy语言有一天可能成为Java世界的标准脚本语言吗?这样我就可以作为Java SE/EE的一部分下载到。在Java 6,Mustang版本中,可能会出现对Groovy的一些支持吗?

 

Guillaume Laforge >> Java 6,即众所周知的"Mustang",会包含JSR-223,"JavaTM平台的脚本"。目前实现JSR-223的参考提供了和Groovy语言的集成,所以如果你想用它,你就可以马上使用,甚至是在JDK1.4或5.0中使用。你不得不使用一个次新版的Groovy,因为目前,提供的最新版只是一个beta版。

"Java 6,"Mustang",会包含JSR-223,"JavaTM平台的脚本"..."

Mustang的betas版集成了一个稍微修改过的JSR-223版本,仅仅只集成了Rhino,来自Mozilla的JavaScript引擎。不幸的是,据我所知,他们没有集成Groovy。所以我们不得不为Java 6创建我们自己的脚本引擎,但是可以确定的是我们在Java 6 愿意做这件事之前就已经做好了准备。

 

IndicThreads >>X跟Y的比较永远能够吸引眼球。我能够引起您对于Groovy和Jpython的比较的兴趣吗?

 

Guillaume Laforge >>坦白的说,我对于这类的比较没有什么兴趣。这里有很多原因这样做。首先,我不知道其他的JVM语言是否足够好,以至于我们可以做一个公平的比较。我也不想散布一些否定的断言,因为我带着有偏见的视角。最后一个原因是我不想和其他的语言在"我的比你的好"这样的论调中战斗,因为这是浪费时间,最重要的原因是我们是同舟共济的!我们都希望有好的脚本语言可以嵌入到我们的应用中来,或者写成独立的应用!

"我们都希望有好的脚本语言可以嵌入到我们的应用中来,或者写成独立的应用!..."

如果你已经写了Python程序好多年,你将会选择Jpython,所以我猜如果你的团队成员都很熟悉Python,那么将没有特别好的理由来选择Groovy。如果你已经很熟悉Ruby,那么也是相同的情况,你将选择Jruby。如果你更喜欢普通的类Java语法加上一点弱类型,那么BeanShell也将是更好的选择。如果你也喜欢类Java的语法,但是更喜欢尽可能的使用强大的APIs,能够使用Groovy 元对象协议来进行高级的类操作的话,Groovy语言将更为合适一些。

"如果你的团队非常熟悉Python,那么就没有特别的理由来选择Groovy(超过选择Jpython)..."

每一种语言都有它的优点和缺点,我真的不能(随便)推荐我自己的,虽然我的偏爱会直接选择Groovy,因为它的表达语言和高级特性。但这依赖于你的用例。

 

IndicThreads >>您是怎么决定Groovy语言的发展的?Groovy语言是在尽力的修补Java语言的一切弱点吗?您是否也从其他的语言如Python和Ruby中采纳了一些思想?

 

Guillaume Laforge >>就目前而言,没有太多的思想加入到Groovy中来,因为接下来的几个月里,在第一个发布版本以前,我们将进入一个"特性冰冻"的模式。所以我们不想再加入新的东西,除了性能的提升或bug的修改。Groovy语言决定提供一些对于通用的、广泛使用的APIs的包装类。所以我们得到了顺手的类来处理JDBC,创建Swing GUI接口,或者可以非常容易的操作Ant任务。但是很清楚的是,我们不想创建我们自己版本的APIs,我们仅仅是提供一些语法糖来将复杂的工作简单化--像处理数据库连接或流处理。

"在Java中困扰我们的是一切的我们不得不写的样板代码..."

"通过使用(Groovy语言的)闭包和ad hoc方法,我们可以安全的忘掉那些重复的和烦人的样板代码片段,从而关注手边的主要任务..."

在Java中困扰我们的是一切的我们不得不写的样板代码,例如集合的遍历,这些代码是为了正确的处理资源。通过使用闭包和ad hoc方法,我们可以安全的忘掉那些重复的和烦人的样板代码片段,从而关注手边的主要任务。Groovy语言让我们在这些情况下更加产品化,并且能够使得我们避免犯一些普通的错误,如忘记关闭流,等等。

"一旦你习惯了闭包的概念,你将会被牢牢的吸引住,你会纳闷为什么Java仍然没有支持这个特性!..."

我们从一些知名的脚本语言中吸取了一些思想。其中最大的特性就恰恰是闭包,它来自于一些语言例如SmallTalk和Ruby。一旦你习惯了闭包的概念,你将会被牢牢的吸引住,你会纳闷为什么Java仍然没有支持这个特性!

 

IndicThreads >> "闭包支持"在Groovy网站上被列为Groovy语言的第一特性。您能不能告诉我们什么是闭包,最好能有一个例子?

 

Guillaume Laforge >>闭包很简单,就是能够重用和发布的代码块。这是一个概念,很不幸的是,到今天也不存在于Java语言中。如果我对于Java语言只有一个特性要求,那么它就是自然的支持闭包!

"闭包很简单,就是能够重用和发布的代码块..."

在Groovy中,闭包看起来就是由大括号包围起来的语句段。至于例子,下面的语句行就是一个闭包:

{ println "hello" }

但是你能够把这个闭包分配给一个变量:

def helloClosure = { println "hello" }

 

然后,你就可以调用这个闭包,就像它是一个普通的方法一样:

helloClosure() // and it'll print hello

你可以传递一个参数给一个闭包:

def printer = { msg -> println "your message is: $msg" }

 

然后,你就可以调用和重用这个"printer"闭包:

printer( "hello" )
printer( "Groovy!" )

 

现在,让我们看一个更有用的例子。例如,你有一个list对象,你想过滤:

def myNumbers = [1, 2, 3, 4, 5]
def criteria = { it > 3 } // 'it' is an implicit parameter
def result = myNumbers.findAll( criteria )

 

你可以传递一个条件到"findAll()"方法里,使得它能够找到list对象中大于3的数字。你也可以使用匿名的闭包:

def result = myNumbers.findAll { it > 3 }

 

在Java语言中,你会不得不写一段的样板代码来做这样一个过滤集合的简单事情!在Groovy语言中,它只有简单的一行。

闭包可以给你更加有表达性的代码,通过允许你重用代码段来操作集合和其他的事情。

(未完待续)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值