ApacheGroovyJava平台上設計的物件導向程式設計語言。這門動態語言擁有類似PythonRubySmalltalk中的一些特性,可以作為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]

Groovy
Groovy-logo
編程範型物件導向手稿語言
設計者James Strachan英語James Strachan (programmer)
實作者Guillaume Laforge (PMC主席)
Jochen Theodorou (技術主管)
Paul King
Cedric Champeau
釋出時間2003年
目前版本
  • 4.0.21 (2024年4月6日;穩定版本)[1]
編輯維基數據連結
型態系統動態duck
系統平台Java虛擬機器
作業系統跨平台Java虛擬機器
特許條款Apache特許條款v2.0
網站http://groovy-lang.org/
啟發語言
Java, Python, Ruby, Perl, SmalltalkObjective-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支援

已經有許多的整合式開發環境支援了該門語言:

參考資訊

  1. ^ Release 4.0.21. 2024年4月6日 [2024年4月23日]. 
  2. ^ "Groovy joins Apache Incubator".11 Mar 2015.. [2017-08-24]. (原始內容存檔於2020-12-04). 

外部連結