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语言中,它只有简单的一行。
闭包可以给你更加有表达性的代码,通过允许你重用代码段来 *** 作集合和其他的事情。
(未完待续)
总结以上是内存溢出为你收集整理的Groovy是连接脚本语言和企业级Java世界的桥梁 二全部内容,希望文章能够帮你解决Groovy是连接脚本语言和企业级Java世界的桥梁 二所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)