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/

然后顷蟀,進(jìn)入正題囤萤。
但是富雅,在講Gradle之前滚婉,還是先說說Groovy這門語言吧骇窍,畢竟主要的語法特點(diǎn)還是需要了解的。
Groovy是一種動態(tài)語言足画,它和Java一樣俘侠,也運(yùn)行于Java虛擬機(jī)中,你可以認(rèn)為Groovy擴(kuò)展了Java語言。
Groovy對自己的定義就是:

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

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

  • 基本語法特點(diǎn):

1.注釋標(biāo)記和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來設(shè)置xxx為函數(shù)返回值悔常。如果不使用return語句的話,則函數(shù)里最后一句代碼的執(zhí)行結(jié)果被設(shè)置成返回值。
8.Groovy中函數(shù)調(diào)用的時候可以不加括號。
...
具體的例子可以參見http://www.infoq.com/cn/articles/android-in-depth-gradle遗嗽,然后自己寫幾個hello world的groovy腳本運(yùn)行試試娇豫。

  • 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中毅整,當(dāng)函數(shù)的最后一個參數(shù)是閉包的話艇潭,函數(shù)的調(diào)用可以省略圓括號蹋凝。(這點(diǎn)非常重要鳍寂,我們看到的build script里面各種script block其實(shí)都是方法調(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"
}

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

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

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

groovy test.groovy

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子边酒,更是在濱河造成了極大的恐慌氓涣,老刑警劉巖淳附,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件脊框,死亡現(xiàn)場離奇詭異吠裆,居然都是意外死亡祝旷,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人贩据,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長外莲,這世上最難降的妖魔是什么亥曹? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任笼呆,我火速辦了婚禮瞳腌,結(jié)果婚禮上各淀,老公的妹妹穿的比我還像新娘。我一直安慰自己魏颓,他們只是感情好偷遗,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布突诬。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上露泊,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天捺宗,我揣著相機(jī)與錄音,去河邊找鬼撬讽。 笑死,一個胖子當(dāng)著我的面吹牛料皇,可吹牛的內(nèi)容都是我干的贾富。 我是一名探鬼主播颤枪,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼春缕!你這毒婦竟也來了锄贼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎冯键,沒想到半個月后惫确,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體改化,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡盏档,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年懦窘,在試婚紗的時候發(fā)現(xiàn)自己被綠了畅涂。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片午衰。...
    茶點(diǎn)故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖帅戒,靈堂內(nèi)的尸體忽然破棺而出逻住,到底是詐尸還是另有隱情瞎访,我是刑警寧澤扒秸,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布宾巍,位于F島的核電站顶霞,受9級特大地震影響选浑,放射性物質(zhì)發(fā)生泄漏古徒。R本人自食惡果不足惜隧膘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望萨驶。 院中可真熱鬧腔呜,春花似錦再悼、人聲如沸核畴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽膛檀。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間咖刃,已是汗流浹背泳炉。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工嚎杨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留花鹅,地道東北人。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓枫浙,卻偏偏與公主長得像刨肃,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子箩帚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理真友,服務(wù)發(fā)現(xiàn),斷路器紧帕,智...
    卡卡羅2017閱讀 134,652評論 18 139
  • Groovy :是一種動態(tài)語言盔然。 1:這種語言比較有特點(diǎn),它和 Java 一樣是嗜,也運(yùn)行于 Java 虛擬機(jī)中愈案。簡單...
    PeytonWu閱讀 1,556評論 0 1
  • 導(dǎo)語: 隨著技術(shù)的發(fā)展,不管是前端開發(fā)鹅搪、服務(wù)端開發(fā)或者是移動端開發(fā)(移動也是前端的一個分支)中都會用到自動化構(gòu)建工...
    伊始雨深閱讀 3,026評論 0 4
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,804評論 6 342
  • 我承認(rèn)站绪,對你的思念中有太多的情欲,以至于偏離了我愛的傾述丽柿。我一直不愿將情欲從對你的愛之中剝離恢准,因?yàn)槲液ε拢苍S我對...
    的確良閱讀 798評論 0 1