Gradle系列(一):先對Groovy這門語言做個簡單的了解

感覺寫在一篇里面的話,篇幅會很長,所以拆成系列來寫,每一篇專注一個主題,這樣條理也會清晰一些。

首先,是完成這個系列的過程中所閱讀、參考的資料:
[1] Gradle for Android
[2] https://lippiouyang.gitbooks.io/gradle-in-action-cn/content/
[3] http://www.infoq.com/cn/articles/android-in-depth-gradle
[4] https://docs.gradle.org/current/javadoc/org/gradle/api/Project.html
[5] https://docs.gradle.org/current/dsl/
[6] http://google.github.io/android-gradle-dsl/current/

然后,進入正題。
但是,在講Gradle之前,還是先說說Groovy這門語言吧,畢竟主要的語法特點還是需要了解的。
Groovy是一種動態(tài)語言,它和Java一樣,也運行于Java虛擬機中,你可以認為Groovy擴展了Java語言。
Groovy對自己的定義就是:

Groovy是在 java平臺上的、 具有像Python, Ruby 和 Smalltalk 語言特性的靈活動態(tài)語言, Groovy保證了這些特性像 Java語法一樣被 Java開發(fā)者使用。

除了語言和Java相通外,Groovy有時候又像一種腳本語言。
當執(zhí)行Groovy腳本時,Groovy會先將其編譯成Java類字節(jié)碼,然后通過JVM來執(zhí)行這個class文件。

  • 基本語法特點:

1.注釋標記和Java一樣。
2.語句可以不用分號結(jié)尾。
3.支持動態(tài)類型。即定義變量的時候可以不指定其類型。
4.變量定義可以使用關(guān)鍵字def。注意,雖然def不是必須的,但是為了代碼清晰,建議還是使用def關(guān)鍵字。
5.函數(shù)定義時,可以不指定參數(shù)的類型。
6.函數(shù)的返回值也可以是無類型的。
7.函數(shù)返回值:Groovy的函數(shù)里,可以不使用return xxx來設置xxx為函數(shù)返回值。如果不使用return語句的話,則函數(shù)里最后一句代碼的執(zhí)行結(jié)果被設置成返回值。
8.Groovy中函數(shù)調(diào)用的時候可以不加括號。
...
具體的例子可以參見http://www.infoq.com/cn/articles/android-in-depth-gradle,然后自己寫幾個hello world的groovy腳本運行試試。

  • I/O操作相關(guān)類的SDK地址

這些類在Gradle配置文件中可能會用到喲
java.io.File:
http://docs.groovy-lang.org/latest/html/groovy-jdk/java/io/File.html
java.io.InputStream:
http://docs.groovy-lang.org/latest/html/groovy-jdk/java/io/InputStream.html
java.io.OutputStream:
http://docs.groovy-lang.org/latest/html/groovy-jdk/java/io/OutputStream.html
java.io.Reader:
http://docs.groovy-lang.org/latest/html/groovy-jdk/java/io/Reader.html
java.io.Writer:
http://docs.groovy-lang.org/latest/html/groovy-jdk/java/io/Writer.html
java.nio.file.Path:
http://docs.groovy-lang.org/latest/html/groovy-jdk/java/nio/file/Path.html

  • 閉包Closure

閉包,是一種數(shù)據(jù)類型,它代表了一段可執(zhí)行的代碼。

def aClosure = {//閉包是一段代碼,所以需要用花括號括起來..  
    String param1, int param2 ->  //這個箭頭很關(guān)鍵。箭頭前面是參數(shù)定義,箭頭后面是代碼  
    println "this is code" //這是代碼,最后一句是返回值,  
   //也可以使用return,和Groovy中普通函數(shù)一樣  
}  

在Groovy中,當函數(shù)的最后一個參數(shù)是閉包的話,函數(shù)的調(diào)用可以省略圓括號。(這點非常重要,我們看到的build script里面各種script block其實都是方法調(diào)用,這些方法都以closure作為參數(shù),所以直接省略方法調(diào)用的圓括號了)
比如:

def  testClosure(int a1, String b1, Closure closure){
      //do something
      closure() //調(diào)用閉包
}
//那么調(diào)用的時候,就可以免括號!
testClosure  4, "test", {
   println "i am in closure"
}

我習慣粗略地將閉包按照Java中的回調(diào)去理解:一個只有單一方法的接口。這種理解是從功能/作用的角度出發(fā),兩者承擔的功能/作用是差不多的。

  • Groovy腳本是怎么實現(xiàn)的

Java中,我們最熟悉的是類。但是我們在Java的一個源碼文件中,不能不寫class(interface或者其他....)。
而Groovy可以像寫腳本一樣,把要做的事情都寫在xxx.groovy中,比如叫test.groovy,然后通過

groovy test.groovy

直接執(zhí)行這個腳本。
這到底是怎么實現(xiàn)的呢?
Groovy既然是基于Java的,就需要把test.groovy中的內(nèi)容轉(zhuǎn)換成一個Java類。

作為一門語言,Groovy是復雜的,是需要深入學習和鉆研的。一本厚書甚至都無法描述Groovy的方方面面。
從使用角度看,尤其是又限定在Gradle這個領域內(nèi),能用到的都是Groovy中一些簡單的知識。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,534評論 19 139
  • Groovy :是一種動態(tài)語言。 1:這種語言比較有特點,它和 Java 一樣,也運行于 Java 虛擬機中。簡單...
    PeytonWu閱讀 1,674評論 0 1
  • 導語: 隨著技術(shù)的發(fā)展,不管是前端開發(fā)、服務端開發(fā)或者是移動端開發(fā)(移動也是前端的一個分支)中都會用到自動化構(gòu)建工...
    伊始雨深閱讀 3,145評論 0 4
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,261評論 6 342
  • 我承認,對你的思念中有太多的情欲,以至于偏離了我愛的傾述。我一直不愿將情欲從對你的愛之中剝離,因為我害怕,也許我對...
    的確良閱讀 1,093評論 0 1

友情鏈接更多精彩內(nèi)容