Groovy
編程範型 | 面向對象,腳本語言 |
---|---|
設計者 | 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 |
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]。
特性
[編輯]大部分有效的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.23. 2024年9月9日 [2024年9月21日].
- ^ "Groovy joins Apache Incubator".11 Mar 2015.. [2017-08-24]. (原始內容存檔於2020-12-04).