Gradle系列1--Groovy

Gradle是目前最流行的Java構建工具,基於Groovy開發,因此使用Gradle前必須對groovy有一定的瞭解。記錄groovy使用中的一些重要概念, 後續繼續補充。

詳細文檔參考http://www.groovy-lang.org/single-page-documentation.html,至少看完Groovy Language Specification這部分。 這是一份官方的權威文檔,案例與解析的方式並用,可以快速掌握Groovy基本語法和使用方法。需要的只是Java基礎、克服中文文檔的依賴(可以配合強大的翻譯插件,軟件...)和閱讀文檔的耐心。

閉包(Closure)

Groovy中的閉包是一個公開、匿名的代碼塊,可以接收參數,將返回值賦值給變量。閉包可以引用在其周圍範圍內聲明的變量。查看1.5. Closures以確保能理解和使用閉包.

代理/委託策略(Delegation strategy)

Groovy定義作爲Closure實例的閉包(closure)與Java 8中的 lambda 表達式有很大的不同. 代理是一個 lambda 中沒有等價物的一個關鍵概念. 可修改閉包的代理和代理策略使得在Groovy中設計優美的DSL成爲可能.

Owner, delegate和this

爲了理解代理的概念, 我們必須先解釋閉包中的this. 一個閉包定義了3個不同的事物:

  • this對應於定義閉包的包裹類(enclosing class)

  • owner對應於定義閉包的包裹對象(enclosing object), 可能是類或閉包

  • delegate對應於當接收着沒有定義可供調用方法或解析屬性時的第三方對象

請參看http://docs.groovy-lang.org/latest/html/documentation/#closure-owner中的代碼示例

補充:

thisowner: 大部分情況下是同一個對象, 定義在閉包中的閉包其owner爲外層閉包對象, 而此時this指外層閉包所在的類對象.

ownerdelegate: 默認情況下閉包的delegate就是owner, 但可以通過Closure.delegate來修改默認行爲

代理策略

閉包中定義了若干代理策略供選擇

  • Closure.OWNER_FIRST默認策略. 若 owner中存在屬性和方法則調用owner的, 否則使用 delegate .

  • Closure.DELEGATE_FIRST 反之: delegate 優先, 其次 owner

  • Closure.OWNER_ONLY will 只解析 owner的屬性和方法, 忽略delegate.

  • Closure.DELEGATE_ONLY 只解析delegate的屬性和方法, 忽略owner.

  • Closure.TO_SELF 可以由需要高級元編程技術並希望實現自定義解析策略的開發人員使用:解決方案只能在包裹類自身進行, 而不會作用在ownerdelegate 上。實現自定義Closure的唯一選擇。

Differences with Java

參看Differences with Java部分

Operator overloading

所有支持重載的操作符及對應方法見: http://docs.groovy-lang.org/latest/html/documentation/#Operator-Overloading

Traits

http://docs.groovy-lang.org/latest/html/documentation/#_traits

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章