gradle技巧之語法淺談
- 原文鏈接 : Gradle tip #2: understanding syntax
- 原文作者 : Pavlo Dudka
- 譯文出自 : 開發技術前線 www.devtf.cn
- 譯者 : FTExplore
- 狀態 : 未完成 / 校對中 / 完成
</ul> </blockquote>回顧
在上一篇的博文(Gradle tip #2 : Tasks)中,我們討論了gradle構建的基本單位Task. 并且介紹了構建過程的各個階段及其生命周期.而本文會重點介紹gradle的語法.只有具備了gradle
的相關語法知識,才會大幅度的提高對于閱讀、學習或者編寫gradle腳本的效率,正所謂”磨刀不誤砍柴工”是也.引言
gradle 是groovy語言實現的構建工具. groovy是運行在jvm平臺的一門敏捷開發語言.其語法和java有諸多類似之處,然而其具備一些java沒有的概念需要讀者細細體會.下面會詳細的介紹
groovy的基本語法,當然如果您已經對groovy的語法有了一定的了解.可以直接跳過這一小節.1、閉包的基本語法
閉包是groovy中最重要的概念之一. 簡單地說閉包(Closures)是一段代碼塊. 這個代碼塊可以接受參數并具有返回值. 有一點要非常注意的是, 閉包往往不是在需要使用的時候才寫出來
這么一段代碼(就像Java的匿名類那樣), 通過def 關鍵字可以聲明一個變量代表一個閉包,然后在需要的時候直接使用該變量即可,多說無益,請看如下的例子:一個簡單的hello world閉包:
def myClosure = { println 'Hello world!' }//execute our closure myClosure()</pre></div>
</div>
output: Hello world!
如下是一個接受參數的閉包的例子:
def myClosure = {String str -> println str }//execute our closure myClosure('Hello world!')</pre></div> </div>
output: Hello world!
如果閉包只接受一個參數,這個參數在代碼塊中可以用it代替:
def myClosure = {println it }//execute our closure myClosure('Hello world!')</pre></div> </div>
output: Hello world!
如下是接受多個參數的閉包的例子:
def myClosure = {String str, int num -> println "$str : $num" }//execute our closure myClosure('my string', 21)</pre></div> </div>
output: my string : 21
閉包里面的參數類型可以省略不寫,例子如下:
def myClosure = {str, num -> println "$str : $num" }//execute our closure myClosure('my string', 21)</pre></div>
</div>
output: my string : 21
閉包還有一個比較酷的寫法就是,可以直接調用context里面的變量,默認的context就是創建這個閉包的類(class) 例子如下:
</div>def myVar = 'Hello World!' def myClosure = {println myVar} myClosure()output: Hello world!
上面提到了閉包可以直接調用context的變量,這個context可以通過setDelegate()方法來改變,極大的增加了閉包的靈活性!
def myClosure = {println myVar} //I'm referencing myVar from MyClass class MyClass m = new MyClass() myClosure.setDelegate(m) myClosure()class MyClass { def myVar = 'Hello from MyClass!' }</pre></div> </div>
output: Hello from MyClass!
2、閉包可以作為參數進行傳遞
在groovy中,將閉包作為參數傳遞進函數,是將邏輯進行分離解耦的重要手段.在上述的例子中,我們已經嘗試了如何將閉包作為參數進行傳遞.下面我們總結一下傳遞閉包的方法:
1 接受一個參數的函數
myMethod(myClosure)
2 如果函數只接受一個參數,括號可以忽略
myMethod myClosure
3 可以將閉包以插入語的形式創建
myMethod {println ‘Hello World’}
4 函數接受兩個參數
myMethod(arg1, myClosure)
5 接受兩個參數,同樣可以用插入語創建閉包
myMethod(arg1, { println ‘Hello World’ })
6 如果存在多個參數,且最后一個參數是閉包,閉包可以不寫在括號內
myMethod(arg1) { println ‘Hello World’ }
細心的朋友們是不是覺得上述的六種用法中,第三條和第六條很眼熟?很像gradle中的scripts了?
Gradle
在知道了groovy的基本語法(尤其是閉包)之后,下面我們就以一個簡單的gradle 腳本作為例子具體感受一下:
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!相關經驗
sesese色