《Gradle 權威指南》讀書筆記——第二章 Groovy 基礎

String

//'' 不能動態打印
print'x=${x}' //"x=${x}"
//""可以動態打印,{}中可以放表達式,只有一個變量時可以省略花括號
print'x=${x}' //"x=1"
print'x=$x' //"x=1"
//''' '''支持任意換行

集合
Groovy完全兼容了Java的集合,並且進行了擴展
List

def list=[1,2,3,4,5]
println list[-1] //倒數第一個元素
println list[1..3] //訪問第二到第四元素
list.each{   
print it
}

Map

def map=['key1':1,'key2':2]
print map['key1']
map.each{
    //it:Map.Entry
}

方法的編寫以及調用

task testMethod  {
//()可以省略
    def x =method 1,2
    println x
}
def int method(int a,int b){
    //有返回值是可以省略return 會默認把最後依據作爲返回值
    a+b
}
​

閉包

代碼塊是可以作爲參數傳遞
task testC << {
    method (10){
        a,b->
        println a
        println b
    }
}
def method(int a,closure){
    a=a*a
    closure(a,a)
}


閉包作爲參數

list.each({
    it.xxx  
})
//最後一個參數是閉包,可以放到外面
list.each(){
    it.xxx  
}
//括號可以省略
list.each{
    it.xx
}

JavaBean
Javabean.屬性來直接獲取和設置

閉包的委託
Groovy的強大之處是在於它支持方法的委託.
閉包具有三個屬性:
thisObject
owner
delegate
在閉包內調用方法時,可以指定通過哪個對象來處理.
默認情況下delegate與owner是相等的
但delegate是可以被修改的

//thisObject的優先級最高,thisObject其實就是構建這個腳本的上下文,它和腳本的中this是相等的
thisObject>owner>delegate

Demo
task testC << {
    testPerson{
        name="小黃"
        age=18
        dumpPerson()
    }
}
class Person{
    String name;
    int age;
    void dumpPerson(){
        println "$name : $age"
    }
}
def testPerson(Closure<Person> closure){
    def p=new Person();
    closure.delegate=p;
    //委託模式優先
    closure.setResolveStrategy(Closure.DELEGATE_FIRST);
    closure(p)
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章