关于 Groovy
这一节将学习 Groovy 的基础知识:它是什么,它与 Java 语言和 JVM 的关系,以及编写 Groovy 代码的一些要点。
一、什么是 Groovy?
Groovy 是 JVM 的一个替代语言 — 替代 是指可以用 Groovy 在 Java 平台上进行 Java 编程,使用方式基本与使用 Java 代码的方式相同。在编写新应用程序时,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码。目前的 Groovy 版本是 1.5.4,在 Java 1.4 和 Java 5 平台上都能使用,也能在 Java 6 上使用。
Groovy 的一个好处是,它的语法与 Java 语言的语法很相似。虽然 Groovy 的语法源于 Smalltalk 和 Ruby 这类语言的理念,但是可以将它想像成 Java 语言的一种更加简单、表达能力更强的变体。(在这点上,Ruby 与 Groovy 不同,因为它的语法与 Java 语法差异很大。)
许多 Java 开发人员非常喜欢 Groovy 代码和 Java 代码的相似性。从学习的角度看,如果知道如何编写 Java 代码,那就已经了解 Groovy 了。Groovy 和 Java 语言的主要区别是:完成同样的任务所需的 Groovy 代码比 Java 代码更少。(有时候会少很多!)
二、Groovy快捷方式
开始使用 Groovy 时,您会发现它使日常的编程活动变得快了许多。完成本教程之后,您会了解更多的 Groovy 语法快捷方式。不过现在只需知道以下这些要点:
- Groovy 的松散的 Java 语法允许省略分号和修改符。
- 除非另行指定,Groovy 的所有内容都为
public
。 - Groovy 允许定义简单脚本,同时无需定义正规的
class
对象。 - Groovy 在普通的常用 Java 对象上增加了一些独特的方法和快捷方式,使得它们更容易使用。
- Groovy 语法还允许省略变量类型。
Groovy代码样例:
def var="hello world" println var println var.class
三、Groovy 是没有类型的 Java 代码
无类型有什么意义
那么,Groovy 缺少类型意味着所需的输入更少。不可否认,将 String
替换成 def
并没有真正节约多少打字工作 — 三个字母并不值得如何夸耀!但是在更高的层次上看,在编写大量不仅仅包含变量声明的代码的时候,没有类型确实减少了许多打字工作。更重要的是,这意味着要 阅读的代码要少得多。最后,Groovy 缺少类型能够带来更高的灵活性 — 不需要接口或抽象类。
所以,只需要使用 def
关键字就能在方法中声明一个独立变量,不需要将 def
关键字作为方法声明中的参数。在 for
循环声明中也不需要它,这意味着不用编写 (int x = 0; x < 5; x++)
,相反,可以省略 int
,保留空白。
四、Groovy 中的闭包
def acoll = ["Groovy", "Java", "Ruby"]
acoll.each{
println it
}
def hash = [name:"Andy", "VPN-#":45] hash.each{ key, value -> println "${key} : ${value}" }
闭包的更多使用方式
虽然在迭代上使用闭包的机会最多,但闭包确实还有其他用途。因为闭包是一个代码块,所以能够作为参数进行传递(Groovy 中的函数或方法不能这样做)。闭包在调用的时候才会执行这一事实(不是在定义的时候)使得它们在某些场合上特别有用。
例如,通过 Eclipse 创建一个 ClosureExample
对象,并保持它提供的默认类语法。在生成的 main()
方法中,添加以下代码:
def excite = { word -> return "${word}!!" }
延迟执行
assert "Groovy!!" == excite("Groovy") assert "Java!!" == excite.call("Java")
五、结束语
如果说您从本教程获得了一个收获的话(除了初次体验 Groovy 编程之外),那么这个收获应该是深入地认识到 Groovy 就是 Java,只是缺少了您过去使用的许多语法规则。Groovy 是没有类型、没有修改符、没有 return、没有 Iterator
、不需要导入集合的 Java。简而言之,Groovy 就是丢掉了许多包袱的 Java,这些包袱可能会压垮 Java 项目。
但是在幕后,Groovy 就是 Java。
参考:
http://www.ibm.com/developerworks/cn/education/java/j-groovy/section13.html
http://blog.csdn.net/kmyhy/article/details/4200563