Groovy
Apache的Groovy是Java平台上设计的面向对象编程语言。这门动态语言拥有类似Python、Ruby和Smalltalk中的一些特性,可以作为Java平台的脚本语言使用,Groovy代码动态地编译成运行于Java虚拟机(JVM)上的Java字节码,并与其他Java代码和库进行互操作。由于其运行在JVM上的特性,Groovy可以使用其他Java语言编写的库。Groovy的语法与Java非常相似,大多数Java代码也符合Groovy的语法规则,尽管可能语义不同。 Groovy 1.0于2007年1月2日发布,并于2012年7月发布了Groovy 2.0。从版本2开始,Groovy也可以静态编译,提供类型推论和Java相近的性能。Groovy 2.4是Pivotal软件赞助的最后一个主要版本,截止于2015年3月。Groovy已经将其治理结构更改为Apache软件基金会的项目管理委员会(PMC)[2]。
![]() | |
编程范型 | 面向对象,脚本语言 |
---|---|
设计者 | James Strachan |
实现者 | Guillaume Laforge (PMC主席) Jochen Theodorou (技术主管) Paul King Cedric Champeau |
发行时间 | 2003年 |
当前版本 |
|
类型系统 | 强,动态,duck |
系统平台 | Java虚拟机 |
操作系统 | 跨平台(Java虚拟机) |
许可证 | Apache许可证v2.0 |
网站 | http://groovy-lang.org/ |
启发语言 | |
Java, Python, Ruby, Perl, Smalltalk,Objective-C |
特性
编辑大部分有效的Java文件也是有效的Groovy文件。Groovy代码比Java代码更加紧凑,因为它不需要Java需要的所有元素。这两种语言的相似性,让Java程序员可以先从熟悉的Java语法开始逐步学习Groovy。
Groovy特性包括了Java中不支持的静态和动态类型(使用关键字 def),运算符重载,提供了lists(列表)和关联数组(maps)提供了原生语法,原生支持正则表达式,多态迭代,字符串内嵌表达式,添加帮助方法以及Null条件运算符,自动空指针检查(列:variable?.method()
,或 variable?.field
)。
从Groovy 2开始,支持模块化(能只根据项目需要添加所需的jar包,从而减少Groovy库的大小),使用JDK7的类型检查,静态编译,Project Coin语法增强,多块模块和持续的性能增强 调用动态指令。
Groovy透过内联文档对象模型(DOM)语法对各种标记语言(如XML和HTML)的提供原生支持。该功能实现了使用统一简洁的语法和编程方法来定义和操纵许多类型的异构数据资源。
与Java不同的是,Groovy源代码文件可以当作(未编译的)脚本执行,如果它含有任何类定义之外的代码,或者它是具有main方法的类,或者它是Runnable或GroovyTestCase。 Groovy脚本在执行之前完成解析,编译和生成(类似于Perl和Ruby)。这发生在下一个层次,编译后的版本不会保存为进程的组件
程序示例
编辑下面是来自于 https://web.archive.org/web/20140302111159/http://groovy.codehaus.org/ 的一个示例程序:
class Foo {
doSomething() {
data = ["name": "James", "location": "London"]
for (e in data) {
println("entry ${e.key} is ${e.value}")
}
}
closureExample(collection) {
collection.each { println("value ${it}") }
}
static void main(args) {
values = [1, 2, 3, "abc"]
foo = new Foo()
foo.closureExample(values)
foo.doSomething()
}
}
IDE支持
编辑已经有许多的集成开发环境支持了该门语言:
- Eclipse,插件Groovy-Eclipse
- IntelliJ IDEA,默认就支持Groovy开发。
- NetBeans 默认支持
参考信息
编辑- ^ Release 4.0.22. 2024年6月27日 [2024年7月23日].
- ^ "Groovy joins Apache Incubator".11 Mar 2015.. [2017-08-24]. (原始内容存档于2020-12-04).
外部链接
编辑