《Groovy極簡教程》第1章 Groovy簡介

《Groovy極簡教程》第1章 Groovy簡介

Groovy: 絕妙的; 流行的; 最佳狀態的。
A multi-faceted language for the Java platform. (JVM平臺上的多面體語言。)

官網文檔:http://www.groovy-lang.org/documentation.html
Github源碼:https://github.com/apache/groovy

Groovy是一種基于JVM(Java虛擬機)的敏捷開發語言,它結合了Python、Ruby和Smalltalk的許多強大的特性。

基本特點

1、 構建在強大的Java語言之上 并 添加了從Python,Ruby和Smalltalk等語言中學到的 諸多特征,例如動態類型轉換、閉包和元編程(metaprogramming)支持。。
2、為Java開發者提供了 現代最流行的編程語言特性,而且學習成本很低(幾乎為零)。
3、 支持DSL(Domain Specific Languages領域定義語言)和其它簡潔的語法,讓代碼變得易于閱讀和維護。
4、受檢查類型異常(Checked Exception)也可以不用捕獲。
5、 Groovy擁有處理原生類型,面向對象以及一個Ant DSL,使得創建Shell Scripts變得非常簡單。
6、在開發Web,GUI,數據庫或控制臺程序時 通過 減少框架性代碼 大大提高了開發者的效率。
7、支持單元測試和模擬(對象),可以 簡化測試。
8、無縫集成 所有已經存在的 Java對象和類庫。
9、直接編譯成Java字節碼,這樣可以在任何使用Java的地方 使用Groovy。[2]
10、支持函數式編程,不需要main函數。
11、一些新的運算符。
12、默認導入常用的包。
13、斷言不支持jvm的-ea參數進行開關。
14、支持對對象進行布爾求值。
15、類不支持default作用域,且默認作用域為public。
16、groovy中基本類型也是對象,可以直接調用對象的方法。

Groovy 語法與Java 語言的語法很相似,雖然 Groovy 的語法源于Smalltalk和Ruby這類語言的理念,但是可以將它想像成 Java 語言的一種更加簡單、表達能力更強的變體。(在這點上,Ruby與 Groovy 不同,因為它的語法與 Java 語法差異很大。)
許多 Java 開發人員喜歡 Groovy 代碼和 Java 代碼的相似性。從學習的角度看,如果知道如何編寫 Java 代碼,那就已經了解 Groovy 了。

Groovy 和 Java 語言的主要區別是:完成同樣的任務所需的 Groovy 代碼比 Java 代碼更少。

Groovy 代碼能夠與 Java 代碼很好地結合,也能用于擴展現有代碼,簡單說就是,我們可以編程過程中可以實現Java語言和Groovy之間的無縫集成。

由于其運行在 JVM 上的特性,Groovy 可以使用其他 Java 語言編寫的庫。

Groovy 是 用于Java虛擬機的一種敏捷的動態語言,它是一種成熟的面向對象編程語言,既可以用于面向對象編程,又可以用作純粹的腳本語言。使用該種語言不必編寫過多的代碼,同時又具有閉包和動態語言中的其他特性。

為什么要學習Groovy

為什么要學習Groovy,簡單來說就是Groovy可以用較少的代碼實現較多的功能。

Groovy 的松散的Java 語法允許省略分號和修改符。
除非另行指定,Groovy 的所有內容都為 public。
Groovy 允許定義簡單腳本,同時無需定義正規的 class 對象。
Groovy 在普通的常用 Java 對象上增加了一些獨特的方法和快捷方式,使得它們更容易使用。
變量,屬性,方法,閉包的參數以及方法的返回類型都是可有可無的。
Groovy 默認導入常用的包。

Groovy生態圈

Groovy的生態圈已經很全面了。

Gradle

自動化構建工具,通過編寫簡單的Groovy腳本,便可進行依賴管理和項目構建。如果你想使用Android Studio進行Android開發,Gradle已經成為了Android Studio中的默認構建工具了。

Grails

一套用于快速Web應用開發的開源框架,它基于Groovy編程語言,并構建于Spring、Hibernate和其它標準Java框架之上,從而為大家帶來一套能實現超高生產力的一站式框架。

Spock

測試框架,可通過其特有的DSL編寫測試案例;

Griffon

Swing開發框架,其靈感來自于Grails。

Groovy

一個面向對象的腳本語言,跟Java還是有很大不同的,多了解一門語言,對于提高自己的綜合編程能力也是大有裨益的。另外,如果你是一名Java軟件工程師,學習Groovy幾乎可以說是零成本的。既然有這么多好處,確實是時候來學習一下Groovy了。

動態類型

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

閉包

閉包就是可以使用參數的代碼片段,每個閉包會被編譯成繼承groovy.lang.Closure類的類,這個類有一個叫call方法,通過該方法可以傳遞參數并調用這個閉包.它們可以訪問并修改在閉包創建的范圍內的變量,在閉包內創建的變量在閉包被調用的范圍內同樣可以被引用, 閉包可以保存在變量中并被作為參數傳遞到方法中。

Groovy類和java類一樣,完全可以用標準java bean的語法定義一個Groovy類。但作為另一種語言,可以使用更Groovy的方式定義類,這樣的好處是,可以少寫一半以上的javabean代碼。

(1)不需public修飾符
如前面所言,Groovy的默認訪問修飾符就是public,如果Groovy類成員需要public修飾,則根本不用寫它。
(2)不需要類型說明
同樣前面也說過,Groovy也不關心變量和方法參數的具體類型。
(3)不需要getter/setter方法
在很多ide(如eclipse)早就可以為程序員自動產生getter/setter方法了,在Groovy中,不需要getter/setter方法--所有類成員(如果是默認的public)根本不用通過getter/setter方法引用它們(當然,如果一定要通過getter/setter方法訪問成員屬性,Groovy也提供了它們)。
(4)不需要構造函數
不再需要程序員聲明任何構造函數,因為實際上只需要兩個構造函數(1個不帶參數的默認構造函數,1個只帶一個map參數的構造函數--由于是map類型,通過這個參數可以構造對象時任意初始化它的成員變量)。
(5)不需要return
Groovy中,方法不需要return來返回值。
(6)不需要()
Groovy中方法調用可以省略()(構造函數除外)。

文件與類的關系

在Groovy中類和文件的對應關系并不像Java中那么固定(Java中一個文件只能有一個聲明為public的類和其他一些非公共的類和內嵌類) 。在同一個groovy文件中可以包含多個public的類定義。

具體規則如下:

如果在一個groovy文件中沒有任何類定義,它將被當做script來處理,也就意味著這個文件將被透明的轉換為一個Script類型的類,這個自動轉換得到的類將使用原始的groovy文件名(去掉擴展名,沒有包名,在default包中)作為類的名字。groovy文件的內容被打包進run方法,另外在新產生的類中被加入一個main方法以進行外部執行該腳本。

如果在groovy文件正好有一個類的定義,并且該類的名字與文件名稱相同,那么這就和java中的類與文件的一一對應關系相同。

在一個groovy文件中可以包含多個不同可見性的類定義,并且沒有強制性的要求其中有一個類的類名與文件名相同。groovyc編譯器會很樂于把該文件中定義的所有的類都編譯成*.class文件。如果希望能夠直接調用這個groovy script,比如說在使用groovy命令行或者在某個IDE中執行,那么應該在該文件中的第一個類中定義一個main方法。

在一個groovy文件中可以混合類的定義和腳本定義。在這種情況下,那些腳本代碼將會變成直接調用的主類,所以在這種情況下不應該再定義一個和文件同名的類。

在沒有經過明確的編譯過程即執行時,groovy將通過文件名來查找類。在這種情況下,名稱將會很重要。Groovy只能找到那些和文件名匹配的類。在找到這種名字匹配的類時,找到的文件中定義的其他類將被解析并變得對groovy可見。

參考資料

1.http://baike.baidu.com/item/Groovy?sefr=enterbtn

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,991評論 19 139
  • Groovy 2.0新特性http://www.infoq.com/cn/articles/new-groovy-...
    葡萄喃喃囈語閱讀 2,010評論 0 2
  • 今天我看見馬浩軒和羅一摔跤,讓我想起了一部電影《摔跤吧,爸爸》。我對他們說:“你們是裝模作樣嗎?”他們沒有回答我,...
    格格的歌閱讀 107評論 0 0