Groovy 教程


閱讀(3672.1k) 收藏 (51)

手冊(cè)簡(jiǎn)介

Groovy是一種基于JVM(Java虛擬機(jī))的敏捷開(kāi)發(fā)語(yǔ)言,它結(jié)合了Python、Ruby和Smalltalk的許多強(qiáng)大的特性,Groovy 代碼能夠與 Java 代碼很好地結(jié)合,也能用于擴(kuò)展現(xiàn)有代碼。由于其運(yùn)行在 JVM 上的特性,Groovy 可以使用其他 Java 語(yǔ)言編寫(xiě)的庫(kù)。

手冊(cè)說(shuō)明

簡(jiǎn)介

Groovy是用于Java虛擬機(jī)的一種敏捷的動(dòng)態(tài)語(yǔ)言,它是一種成熟的面向?qū)ο缶幊陶Z(yǔ)言,既可以用于面向?qū)ο缶幊?,又可以用作純粹的腳本語(yǔ)言。使用該種語(yǔ)言不必編寫(xiě)過(guò)多的代碼,同時(shí)又具有閉包和動(dòng)態(tài)語(yǔ)言中的其他特性。

Groovy是JVM的一個(gè)替代語(yǔ)言(替代是指可以用 Groovy 在Java平臺(tái)上進(jìn)行 Java 編程),使用方式基本與使用 Java代碼的方式相同,該語(yǔ)言特別適合與Spring的動(dòng)態(tài)語(yǔ)言支持一起使用,設(shè)計(jì)時(shí)充分考慮了Java集成,這使 Groovy 與 Java 代碼的互操作很容易。(注意:不是指Groovy替代java,而是指Groovy和java很好的結(jié)合編程。

基本特點(diǎn)

1、構(gòu)建在強(qiáng)大的Java語(yǔ)言之上 并 添加了從Python,Ruby和Smalltalk等語(yǔ)言中學(xué)到的 諸多特征,例如動(dòng)態(tài)類(lèi)型轉(zhuǎn)換、閉包和元編程(metaprogramming)支持。

2、為Java開(kāi)發(fā)者提供了 現(xiàn)代最流行的編程語(yǔ)言特性,而且學(xué)習(xí)成本很低(幾乎為零)。

3、支持DSL(Domain Specific Languages領(lǐng)域定義語(yǔ)言)和其它簡(jiǎn)潔的語(yǔ)法,讓代碼變得易于閱讀和維護(hù)。

4、受檢查類(lèi)型異常(Checked Exception)也可以不用捕獲。

5、Groovy擁有處理原生類(lèi)型,面向?qū)ο笠约耙粋€(gè)Ant DSL,使得創(chuàng)建Shell Scripts變得非常簡(jiǎn)單。

6、在開(kāi)發(fā)Web,GUI,數(shù)據(jù)庫(kù)或控制臺(tái)程序時(shí) 通過(guò) 減少框架性代碼 大大提高了開(kāi)發(fā)者的效率。

7、支持單元測(cè)試和模擬(對(duì)象),可以 簡(jiǎn)化測(cè)試。

8、無(wú)縫集成 所有已經(jīng)存在的 Java對(duì)象和類(lèi)庫(kù)。

9、直接編譯成Java字節(jié)碼,這樣可以在任何使用Java的地方 使用Groovy。

10、支持函數(shù)式編程,不需要main函數(shù)。

11、一些新的運(yùn)算符。

12、默認(rèn)導(dǎo)入常用的包。

13、斷言不支持jvm的-ea參數(shù)進(jìn)行開(kāi)關(guān)。

14、支持對(duì)對(duì)象進(jìn)行布爾求值。

15、類(lèi)不支持default作用域,且默認(rèn)作用域?yàn)閜ublic。

16、groovy中基本類(lèi)型也是對(duì)象,可以直接調(diào)用對(duì)象的方法。

動(dòng)態(tài)類(lèi)型

類(lèi)型對(duì)于變量,屬性,方法,閉包的參數(shù)以及方法的返回類(lèi)型都是可有可無(wú)的,都是在給變量賦值的時(shí)候才決定它的類(lèi)型, 不同的類(lèi)型會(huì)在后面用到,任何類(lèi)型都可以被使用,即使是基本類(lèi)型 (通過(guò)自動(dòng)包裝(autoboxing)). 當(dāng)需要時(shí),很多類(lèi)型之間的轉(zhuǎn)換都會(huì)自動(dòng)發(fā)生,比如在這些類(lèi)型之間的轉(zhuǎn)換: 字符串(String),基本類(lèi)型(如int) 和類(lèi)型的包裝類(lèi) (如Integer)之間,可以把不同的基本類(lèi)型添加到同一數(shù)組(collections)中。

閉包

閉包就是可以使用參數(shù)的代碼片段,每個(gè)閉包會(huì)被編譯成繼承g(shù)roovy.lang.Closure類(lèi)的類(lèi),這個(gè)類(lèi)有一個(gè)叫call方法,通過(guò)該方法可以傳遞參數(shù)并調(diào)用這個(gè)閉包.它們可以訪問(wèn)并修改在閉包創(chuàng)建的范圍內(nèi)的變量,在閉包內(nèi)創(chuàng)建的變量在閉包被調(diào)用的范圍內(nèi)同樣可以被引用, 閉包可以保存在變量中并被作為參數(shù)傳遞到方法中。

語(yǔ)法

Groovy 語(yǔ)法與Java 語(yǔ)言的語(yǔ)法很相似,雖然 Groovy 的語(yǔ)法源于Smalltalk和Ruby這類(lèi)語(yǔ)言的理念,但是可以將它想像成 Java 語(yǔ)言的一種更加簡(jiǎn)單、表達(dá)能力更強(qiáng)的變體。(在這點(diǎn)上,Ruby與 Groovy 不同,因?yàn)樗恼Z(yǔ)法與 Java 語(yǔ)法差異很大。)

許多 Java 開(kāi)發(fā)人員喜歡 Groovy 代碼和 Java 代碼的相似性。從學(xué)習(xí)的角度看,如果知道如何編寫(xiě) Java 代碼,那就已經(jīng)了解 Groovy 了。Groovy 和 Java 語(yǔ)言的主要區(qū)別是:完成同樣的任務(wù)所需的 Groovy 代碼比 Java 代碼更少。

類(lèi)

Groovy類(lèi)和java類(lèi)一樣,完全可以用標(biāo)準(zhǔn)java bean的語(yǔ)法定義一個(gè)Groovy類(lèi)。但作為另一種語(yǔ)言,可以使用更Groovy的方式定義類(lèi),這樣的好處是,可以少寫(xiě)一半以上的javabean代碼。

(1)不需public修飾符

如前面所言,Groovy的默認(rèn)訪問(wèn)修飾符就是public,如果Groovy類(lèi)成員需要public修飾,則根本不用寫(xiě)它。

(2)不需要類(lèi)型說(shuō)明

同樣前面也說(shuō)過(guò),Groovy也不關(guān)心變量和方法參數(shù)的具體類(lèi)型。

(3)不需要getter/setter方法

在很多ide(如eclipse)早就可以為程序員自動(dòng)產(chǎn)生getter/setter方法了,在Groovy中,不需要getter/setter方法--所有類(lèi)成員(如果是默認(rèn)的public)根本不用通過(guò)getter/setter方法引用它們(當(dāng)然,如果一定要通過(guò)getter/setter方法訪問(wèn)成員屬性,Groovy也提供了它們)。

(4)不需要構(gòu)造函數(shù)

不再需要程序員聲明任何構(gòu)造函數(shù),因?yàn)閷?shí)際上只需要兩個(gè)構(gòu)造函數(shù)(1個(gè)不帶參數(shù)的默認(rèn)構(gòu)造函數(shù),1個(gè)只帶一個(gè)map參數(shù)的構(gòu)造函數(shù)--由于是map類(lèi)型,通過(guò)這個(gè)參數(shù)可以構(gòu)造對(duì)象時(shí)任意初始化它的成員變量)。

(5)不需要return

Groovy中,方法不需要return來(lái)返回值。

(6)不需要()

Groovy中方法調(diào)用可以省略()(構(gòu)造函數(shù)除外)。

適用人群

本教程對(duì)于想要學(xué)習(xí)Groovy編程基礎(chǔ)知識(shí)的所有軟件專(zhuān)業(yè)人員非常有用。

學(xué)習(xí)前提

在繼續(xù)本教程之前,您應(yīng)該有一些Java或任何其他面向?qū)ο缶幊陶Z(yǔ)言的實(shí)踐經(jīng)驗(yàn)。 


更新記錄

在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)