Groovy 語法學習


一、配置 Groovy 環境

在 cmd 中,運行 groovy -v,如果打印 groovy 版本信息,則說明配置正確。此外 groovy 自帶了編輯器(方便運行一些 snippets,當然最后可以另存為 .groovy,然后可以通過 groovy xxx.groovy 運行),可通過命令啟動。如下:

在 IntelliJ IDEA 中創建 groovy 工程:

IDEA 自帶對 groovy 的支持,可以直接選擇 Groovy 類型的工程,如下:

新建工程后,在 src 目錄下編輯 Groovy 腳本:

二、基礎語法

1、語言簡介:

  1. 是一種基於 Java 虛擬機的動態語言
  2. 基礎語法和 Java 類似
  3. 能夠調用已存在的 Java 類庫
  4. Groovy 可以作為腳本語言來運行,也可以被編譯為 Java 的字節碼
  5. 如果僅僅在 Gradle 中使用 Groovy,只需要了解一些基本的 Groovy 知識
  6. 在 Groovy 中可以混寫 Java 代碼和 Groovy 知識。並且,如果不了解 Groovy 語法,完全可以只寫 Java 代碼

2、與 Java 的區別:

  1. 表達式后面的分號可省略(一般是省略)
  2. 缺省情況下,構造函數和方法都是 public 的(Java 默認是 package)
  3. 方法中的 return 語句可選,最后一個表達式的值作為返回值
  4. 編譯器自動為屬性添加 getter 和 setter 方法。並且可以直接使用屬性名來訪問屬性,但底層還是調用 getter 和 setter(當然 getter 和 setter 可顯式聲明,自定義)
  5. 當調用 == 來比較兩個對象,底層會自動調用 equals 方法
  6. Groovy 非空為真,而 Java 未采用

3、斷言:assert 可用作前置或后置條件的檢查,當檢查條件不符合時,程序終止運行,並提示錯誤。Groovy 的斷言和 Java 類似,並且運行時不需要指定 -ea 參數。

4、變量類型:

  • Groovy 不強制要求申明變量類型,即可以使用 def 關鍵字定義變量(弱類型)。也可以作為強類型語言使用
  • 注意:類比於 JavaScript 中的 var,但不同的是 Groovy 不指定變量類型,在賦值之前,變量為 Object 類型。好像現在 Java10 也支持 var 了
  • 未賦值之前,變量值為 null
  • 當為變量賦值之時,變量的類型才確定(使用 var,則為弱類型語言,類型可改變)
  • 方法的參數、返回值類型同理

5、運算符:三目運算符 & Elvis 運算符:

//最開始
def name = 'a'
def test = name != null ? name : 'b'
//Groovy 支持非空為真
name = 'a'
test = name ? name : 'b'
//為了“不重復”,才有了 Elvis 運算符
name = 'a'
test = name ?: 'b'

6、參數列表括號:當函數有參數時,可以省略括號。如:func(val1, val2),等價於 func val1, val2。

7、字符串:

單引號字符串:和 Java 的 String 等效
雙引號字符串:是一種新的字符串類型,稱為 GString:可以在字符串中使用 $ 符號引用變量;可以使用 ${} 計算表達式的值。這帶來了很多便捷
三引號字符串:可以保持格式,比如跨多行

8、List 集合:

  • 默認使用 Java 的 ArrayList
  • 使用方括號 [] 表示 List,值用逗號分隔
  • 使用 << 運算符向最后添加一個元素
  • 卻可以使用數組化方式訪問元素
  • 使用 each 方法, lambda 作為參數,來遍歷元素(好像不是 lambda,而是閉包)
  • 其余方法和 Java 是類似的

9、Map 集合:

  • 默認使用 Java 的 LinkedHashMap
  • 使用方括號表示 Map,值用逗號分隔。與 List 的區別在於:值為鍵值對,如 ['name1': 'value1', 'name2': 'value2']
  • 通過為 new Key 賦值,添加新的元素,如 map[newKey] = value
  • 可以使用點號訪問鍵值對,如 map.key,可以使用數組下標方式訪問 key
  • 使用 each 方法遍歷元素,元素為鍵和值

例程(個人覺得,因為 Groovy 是腳本語言吧,所以可以不在類中,而是直接運行一些 "語法糖" ):

10、接下來就是比較帥氣、也相對重要的部分了——閉包 Closure:

  • Groovy 中的閉包是一塊代碼(類似於 lambda 表達式。個人感覺就是把 lambda 包起來了)
  • 可以賦值給變量、作為參數傳遞、像普通的方法被調用
  • 閉包的類型是 groovy.lang.Closure
  • 無參的閉包默認包含一個叫 it 的參數(隱式參數):閉包本身沒有參數,但是調用時,it 代表傳進來的第一個參數;如果調用時沒有提供參數,那么 it 的值為 null
  • 閉包總有一個返回值:如果沒有顯示使用 return 語句,而且最后一個表達式沒有值,那么返回 null

例如:

def closure = { key, value ->
    println value
}

委托:簡言之,就是被委托者,可以使用管理委托者吧。不過暫時用不着,以后再更新。

 好嘛,我就是還沒搞懂。在老師的例程中,完全沒看出委托的作用,不過師傅領進門足矣。由於見識淺薄,對委托也無法熟練應用,等需要了、學會了,再記錄。可能學過設計模式就能懂了吧(劍23,嘿嘿)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM