Groovy

出自維基百科,自由嘅百科全書
Groovy
Groovy-logo
編程範式物件導向腳本語言
設計者James Strachan英文James Strachan (programmer)
編程員Guillaume Laforge(PMC主席)
Jochen Theodorou(技術主管)
Paul King
Cedric Champeau
第一次出現2003年
穩定版本
類型系統強類型動態類型鴨子類型
系統平台Java虛擬機
操作系統跨平台Java虛擬機
軟件授權Apache許可證v2.0
副檔名.groovy、.gvy、.gy,.gsh[1]
網站http://groovy-lang.org/
啟發語言
JavaPythonRubyPerlSmalltalkObjective-C

ApacheGroovyJava平台上面設計嘅物件導向語言。呢隻動態語言擁有類似PythonRuby同埋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)。呢件事發生喺下一個層次,編譯後嘅版本唔會保存做進程嘅組件。

程式例子[編輯]

下面係嚟自 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. "Groovy Goodness: Default Groovy Script File Extensions".
  2. ""Groovy joins Apache Incubator".11 Mar 2015". 原先內容歸檔喺2020-12-04. 喺2017-08-24搵到.

出面網頁[編輯]