1. 前言
Gradle系列已完成,專注於Gradle,有如下幾篇文章
2. 什麼是Groovy
在學習Gradle之前,需要簡單普及一下Groovy的語言基礎.Groovy是一門jvm語言,特定領域的語言,裡面的水特別深.我們不需要全部記住和掌握,只需要記得一些常用的,不清楚的立刻去查API 文件.
因為目前Android的主流構建工具是用的Gradle,而Gradle使用時就需要用到Groovy,還有Gradle DSL和Android DSL.Gradle裡面其實東西比較多.隨便說幾個,比如渠道包(差異包),AOP,插樁,熱修復,外掛化等等,都需要用到Gradle.所以我們Android開發人員對於Gradle的需求非常大.有必要搞清楚.
3. 簡單使用Groovy
開啟Android Studio,隨便新建一個Android專案.點選頂部Tools->Groovy Console即可,這時AS會出來一個視窗,專門拿來執行那種臨時的Groovy程式碼的.因為是在本地執行,所以執行速度會非常快.寫好程式碼後點選視窗左上角的三角按鈕即可執行程式碼.
4. 語法
droovy的語法比java簡潔很多
4.1 簡單示範
int r = 1
def a = 1
a = 'da'
println(a)
def b = "dasa"
def c = 56.4
//呼叫下面的test方法
def d = test()
println(d)
def test() {
println("test method")
return 1
}
//輸出
da
test method
1
複製程式碼
- groovy中不用寫分號
- 變數型別可以省略
- 方法返回型別可以省略,上面test方法中的return也可以省略
- 變數型別比較弱,可以推斷出來
- 字串可以用雙引號或者單引號包起來
4.2 String
def name = "zhangsan"
def b = 2
def test(a, b) {
println("a=${a} b=${b}")
}
test(name, b)
//輸出
a=zhangsan b=2
複製程式碼
- String中如果需要使用到變數,則需要使用$和{}關鍵字,並且需要使用雙引號的時候才能這樣用
- 可以看到方法的入參那裡也可以省略型別
- Java中String有的方法,它都有
4.3 閉包
閉包感覺有點像kotlin的高階函式(不知道對不對),可以將一個閉包作為引數傳入方法,也可以賦值給變數.然後呼叫call方法即可呼叫閉包.kotlin是呼叫invoke.
//定義閉包 閉包的引數
def closure = { int a, String b ->
println("a=${a} b=${b}")
//閉包返回值
return a + b
}
//呼叫閉包 定義result變數不用寫def也可以,666
result = closure.call(1, "name")
println(result)
//輸出
a=1 b=name
1name
複製程式碼
- 閉包使用call方法調起,需要傳入引數
- 閉包定義時的引數型別是可以省略的
4.4 List
比Java中的更加強大.當遇到不會的方法的時候去查API文件,比如下面的示例程式碼中的each閉包,你肯定不知道閉包的引數是什麼,這時我們開啟,List的文件地址,找到each方法,知道了原來是遍歷每個元素,引數是每個元素.
//list 可以存放不同的資料型別
def list = [1, "test", true, 2.3]
list.each { item ->
println(item)
}
list.each {
println(it)
}
//輸出
1
test
true
2.3
複製程式碼
- 閉包的引數只有一個時是可以省略的,在裡面使用時用it代替.和kotlin很像.
- list支援
list[1]
這種形式的訪問
4.5 Map
//空的map
def map1 = [:]
//
def map = ["id":1, "name":"xfhy"]
map['id'] = 2
println(map['id'])
map.id = "idStr"
println(map.id)
map.each { key, value ->
println("key=${key} value=${value}")
}
map.each { entry ->
println(entry)
}
//輸出
2
idStr
key=id value=idStr
key=name value=xfhy
id=idStr
name=xfhy
複製程式碼
- map支援
map['id']
訪問和賦值 - 也支援map.id訪問和賦值
- each遍歷支援2種閉包,使用方式如上,記不清楚沒關係,使用的時候去查API就行
4.6 IO
groovy的檔案操作也是非常非常好使
def file = new File("D:/test.txt")
file.eachLine { line, lineNo ->
println("第${lineNo}行 $line")
}
//輸出
第1行 name
第2行 age
第3行 book
複製程式碼
- 非常好用,簡單直接地讀取檔案內容
- 其他好用的API,請參閱這裡
4.7 類
class Book {
String bookName
double price
}
def book = new Book()
book.with {
bookName = '字典'
price = 24.5
}
println(book.bookName)
println(book.price)
book=null
println(book?.price)
//輸出
字典
24.5
null
複製程式碼
- 使用with操作符,可以對book物件內部屬性進行操作,呼叫方法等
- 使用?可以避免空指標,免得判空.就像kotlin一樣,很棒.
5. 總結
我個人認為,基礎掌握差不多這麼多就行了,剩下的遇到了再查官方文件.