Gradle詳解(一)語(yǔ)法篇

最近打算研究下Android的編譯工具gradle,說(shuō)起來(lái)使用也快2年了债鸡,但是之前文檔啥的都不太多江滨,也沒(méi)啥時(shí)間來(lái)深入研究一下,現(xiàn)在準(zhǔn)備換工作厌均,有時(shí)間了唬滑,來(lái)搞一搞。
首先介紹下groovy----gradle使用的語(yǔ)言棺弊。

groovy其實(shí)是一個(gè)java的簡(jiǎn)化版本晶密,它基于java,并且優(yōu)化了一些java的語(yǔ)法特性模她,開(kāi)發(fā)者可以用腳本語(yǔ)言的形式來(lái)編寫(xiě)代碼稻艰,但是其實(shí)底層還是把groovy編譯成java類(lèi),對(duì)于喜歡使用java且不太會(huì)python等腳本語(yǔ)言的開(kāi)發(fā)者來(lái)說(shuō)侈净,是一個(gè)不錯(cuò)的東西尊勿。

語(yǔ)法簡(jiǎn)介

groovy網(wǎng)站 http://www.groovy-lang.org 僧凤,雖然gradle自帶了編譯器,但是建議想學(xué)習(xí)groovy的同學(xué)們還是下載一個(gè)安裝包元扔,這樣在平時(shí)的工作中也可以使用一下groovy躯保。groovy的語(yǔ)法糖還是很多的,這里主要介紹下我覺(jué)得比較好的地方摇展。

腳本特性

groovy執(zhí)行有多種方式吻氧,可以直接在命令行執(zhí)行,也可以保存為文件(下面例子需要先安裝groovy)

#方式一:
groovy -e "10.times{println('cc')}"
#方式二
groovy MyScript.groovy
#或者
groovy MyScript
#方式三
groovyc  MyScript.groovy
java -cp %GROOVY_HOME%/embeddable/groovy-all-2.4.8.jar MyScript

類(lèi)型優(yōu)化

為什么要有類(lèi)型定義咏连?
在 Java 中盯孙,如果要聲明一個(gè) String變量,則必須輸入:

String value = "Hello World";

但是祟滴,如果仔細(xì)想想振惰,就會(huì)看出,等號(hào)右側(cè)的字符已經(jīng)表明 value的類(lèi)型是 String垄懂。所以骑晶,Groovy 允許省略 value前面的 String類(lèi)型變量,并用 def代替草慧。

def value = "Hello World"

除了輸出 value的值桶蛔,還可以用以下調(diào)用輸出它的類(lèi)型:

def message = "Hello World"
println message.class 

函數(shù)定義時(shí),參數(shù)的類(lèi)型也可以不指定漫谷。比如

String function(arg1,args2){//無(wú)需指定參數(shù)類(lèi)型
}

除了變量定義可以不指定類(lèi)型外仔雷,Groovy中函數(shù)的返回值也可以是無(wú)類(lèi)型的。比如:

//無(wú)類(lèi)型的函數(shù)定義舔示,必須使用def關(guān)鍵字
def  nonReturnTypeFunc(){
     last_line   //最后一行代碼的執(zhí)行結(jié)果就是本函數(shù)的返回值
}
//如果指定了函數(shù)返回類(lèi)型碟婆,則可不必加def關(guān)鍵字來(lái)定義函數(shù)
String  getString(){
   "I am a string"
}

** groovy中最后一行代碼就是函數(shù)的返回值 **

簡(jiǎn)寫(xiě)

groovy中定義的函數(shù),如果至少有一個(gè)參數(shù)惕稻,在調(diào)用的時(shí)候可以省略括號(hào)竖共。比如這樣

def func(String a){
  println(a)
}
func 'hello'

在gradle有大量省略括號(hào)調(diào)用函數(shù)的例子,比如

compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion

默認(rèn)修飾符為public

class Test{
    String name;
}

public成員變量默認(rèn)有g(shù)et俺祠,set函數(shù),例如上面的Test類(lèi)

println("my name is " + new Test().getName())

自動(dòng)導(dǎo)入常用java庫(kù), 使用file等文件無(wú)需導(dǎo)入公给,但是一些第三方的還是需要import

groovy.lang.* 
groovy.util.* 
java.lang.* 
java.util.* 
java.net.* 
java.io.* 
java.math.BigInteger 
java.math.BigDecimal

變量引用

def nick = 'Gina' 
def book = 'Groovy in Action' 
assert "$nick is $book" == 'Gina is Groovy in Action'

list/map/range

def listA = ['1','2','3']
println(listA[1]) //'2'

def http = [ 100 : 'CONTINUE', 200 : 'OK']
println(http[200]) //'ok'

def x = 1..10
assert x.contains(5) 
assert x.size() == 10 
assert x.from == 1 
assert x.to == 10
for(i in x) ...

閉包 (重點(diǎn),后面的gradle經(jīng)常使用)

很多C程序員蜘渣,都習(xí)慣傳遞方法指針作為方法的參數(shù)妓布,但是在java里,卻無(wú)法做到這一點(diǎn)宋梧,現(xiàn)在groovy福利來(lái)了,這就是閉包()
參考文章:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末狰挡,一起剝皮案震驚了整個(gè)濱河市捂龄,隨后出現(xiàn)的幾起案子释涛,更是在濱河造成了極大的恐慌,老刑警劉巖倦沧,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件唇撬,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡展融,警方通過(guò)查閱死者的電腦和手機(jī)窖认,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)告希,“玉大人扑浸,你說(shuō)我怎么就攤上這事⊙嗯迹” “怎么了喝噪?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)指么。 經(jīng)常有香客問(wèn)我酝惧,道長(zhǎng),這世上最難降的妖魔是什么伯诬? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任晚唇,我火速辦了婚禮,結(jié)果婚禮上盗似,老公的妹妹穿的比我還像新娘哩陕。我一直安慰自己,他們只是感情好桥言,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布萌踱。 她就那樣靜靜地躺著,像睡著了一般号阿。 火紅的嫁衣襯著肌膚如雪并鸵。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,821評(píng)論 1 290
  • 那天扔涧,我揣著相機(jī)與錄音园担,去河邊找鬼。 笑死枯夜,一個(gè)胖子當(dāng)著我的面吹牛弯汰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播湖雹,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼咏闪,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了摔吏?” 一聲冷哼從身側(cè)響起鸽嫂,我...
    開(kāi)封第一講書(shū)人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤纵装,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡立美,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了挽唉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡筷狼,死狀恐怖瓶籽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情桑逝,我是刑警寧澤棘劣,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站楞遏,受9級(jí)特大地震影響茬暇,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜寡喝,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一糙俗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧预鬓,春花似錦巧骚、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至顶猜,卻和暖如春沧奴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背长窄。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工滔吠, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人挠日。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓疮绷,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親嚣潜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子冬骚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

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

  • Groovy :是一種動(dòng)態(tài)語(yǔ)言。 1:這種語(yǔ)言比較有特點(diǎn),它和 Java 一樣唉韭,也運(yùn)行于 Java 虛擬機(jī)中夜涕。簡(jiǎn)單...
    PeytonWu閱讀 1,551評(píng)論 0 1
  • 在 Android Studio 構(gòu)建的項(xiàng)目中,基于 Gradle 進(jìn)行項(xiàng)目的構(gòu)建属愤,同時(shí)使用 Android DS...
    Ant_way閱讀 7,331評(píng)論 0 16
  • 導(dǎo)語(yǔ): 隨著技術(shù)的發(fā)展,不管是前端開(kāi)發(fā)酸役、服務(wù)端開(kāi)發(fā)或者是移動(dòng)端開(kāi)發(fā)(移動(dòng)也是前端的一個(gè)分支)中都會(huì)用到自動(dòng)化構(gòu)建工...
    伊始雨深閱讀 3,022評(píng)論 0 4
  • Android Studio作為Android應(yīng)用開(kāi)發(fā)的官方IDE住诸,默認(rèn)使用Gradle作為構(gòu)建工具,所以對(duì)于An...
    feil0n9wan9閱讀 1,661評(píng)論 1 6
  • 前言 由于項(xiàng)目需要用到 Groovy 語(yǔ)言涣澡,這兩天對(duì)其進(jìn)行了粗略的學(xué)習(xí)贱呐,本文是對(duì)學(xué)習(xí)做的一個(gè)簡(jiǎn)單總結(jié),主要內(nèi)容參考...
    簡(jiǎn)單的土豆閱讀 188,468評(píng)論 12 201