Groovy 語法學習

1、配置 Groovy 環境html

在 cmd 中,運行 groovy -v,若是打印 groovy 版本信息,則說明配置正確。此外 groovy 自帶了編輯器(方便運行一些 snippets,固然最後能夠另存爲 .groovy,而後能夠經過 groovy xxx.groovy 運行),可經過命令啓動。以下:設計模式

在 IntelliJ IDEA 中建立 groovy 工程:數組

IDEA 自帶對 groovy 的支持,能夠直接選擇 Groovy 類型的工程,以下:閉包

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

2、基礎語法函數

一、語言簡介:spa

  1. 是一種基於 Java 虛擬機的動態語言
  2. 基礎語法和 Java 相似
  3. 可以調用已存在的 Java 類庫
  4. Groovy 能夠做爲腳本語言來運行,也能夠被編譯爲 Java 的字節碼
  5. 若是僅僅在 Gradle 中使用 Groovy,只須要了解一些基本的 Groovy 知識
  6. 在 Groovy 中能夠混寫 Java 代碼和 Groovy 知識。而且,若是不瞭解 Groovy 語法,徹底能夠只寫 Java 代碼

二、與 Java 的區別:設計

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

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

四、變量類型:code

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

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

//最開始
def name = 'a'
def test = name != null ? name : 'b'
//Groovy 支持非空爲真
name = 'a'
test = name ? name : 'b'
//爲了「不重複」,纔有了 Elvis 運算符
name = 'a'
test = name ?: 'b'

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

七、字符串:

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

八、List 集合:

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

九、Map 集合:

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

例程(我的以爲,由於 Groovy 是腳本語言吧,因此能夠不在類中,而是直接運行一些 "語法糖" ):

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

  • Groovy 中的閉包是一塊代碼(相似於 lambda 表達式。我的感受就是把 lambda 包起來了)
  • 能夠賦值給變量、做爲參數傳遞、像普通的方法被調用
  • 閉包的類型是 groovy.lang.Closure
  • 無參的閉包默認包含一個叫 it 的參數(隱式參數):閉包自己沒有參數,可是調用時,it 表明傳進來的第一個參數;若是調用時沒有提供參數,那麼 it 的值爲 null
  • 閉包總有一個返回值:若是沒有顯示使用 return 語句,並且最後一個表達式沒有值,那麼返回 null

例如:

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

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

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

相關文章
相關標籤/搜索