Gradle系列(一) Groovy 基礎(chǔ)

1. 前言

Gradle系列已完成,專(zhuān)注于Gradle,有如下幾篇文章

2. 什么是Groovy

在學(xué)習(xí)Gradle之前,需要簡(jiǎn)單普及一下Groovy的語(yǔ)言基礎(chǔ).Groovy是一門(mén)jvm語(yǔ)言,特定領(lǐng)域的語(yǔ)言,里面的水特別深.我們不需要全部記住和掌握,只需要記得一些常用的,不清楚的立刻去查API 文檔.

Groovy官方文檔

因?yàn)槟壳癆ndroid的主流構(gòu)建工具是用的Gradle,而Gradle使用時(shí)就需要用到Groovy,還有Gradle DSL和Android DSL.Gradle里面其實(shí)東西比較多.隨便說(shuō)幾個(gè),比如渠道包(差異包),AOP,插樁,熱修復(fù),插件化等等,都需要用到Gradle.所以我們Android開(kāi)發(fā)人員對(duì)于Gradle的需求非常大.有必要搞清楚.

3. 簡(jiǎn)單使用Groovy

打開(kāi)Android Studio,隨便新建一個(gè)Android項(xiàng)目.點(diǎn)擊頂部Tools->Groovy Console即可,這時(shí)AS會(huì)出來(lái)一個(gè)窗口,專(zhuān)門(mén)拿來(lái)運(yùn)行那種臨時(shí)的Groovy代碼的.因?yàn)槭窃诒镜貓?zhí)行,所以執(zhí)行速度會(huì)非陈嗪穑快.寫(xiě)好代碼后點(diǎn)擊窗口左上角的三角按鈕即可運(yùn)行代碼.

4. 語(yǔ)法

droovy的語(yǔ)法比java簡(jiǎn)潔很多

4.1 簡(jiǎn)單示范

int r = 1
def a = 1
a = 'da'
println(a)

def b = "dasa"
def c = 56.4

//調(diào)用下面的test方法
def d = test()
println(d)
def test() {
    println("test method")
    return 1
}

//輸出
da
test method
1
  • groovy中不用寫(xiě)分號(hào)
  • 變量類(lèi)型可以省略
  • 方法返回類(lèi)型可以省略,上面test方法中的return也可以省略
  • 變量類(lèi)型比較弱,可以推斷出來(lái)
  • 字符串可以用雙引號(hào)或者單引號(hào)包起來(lái)

4.2 String

def name = "zhangsan"
def b = 2

def test(a, b) {
    println("a=${a} b=$嚷缭")
}

test(name, b)

//輸出
a=zhangsan b=2
  • String中如果需要使用到變量,則需要使用$和{}關(guān)鍵字,并且需要使用雙引號(hào)的時(shí)候才能這樣用
  • 可以看到方法的入?yún)⒛抢镆部梢允÷灶?lèi)型
  • Java中String有的方法,它都有

4.3 閉包

閉包感覺(jué)有點(diǎn)像kotlin的高階函數(shù)(不知道對(duì)不對(duì)),可以將一個(gè)閉包作為參數(shù)傳入方法,也可以賦值給變量.然后調(diào)用call方法即可調(diào)用閉包.kotlin是調(diào)用invoke.

//定義閉包      閉包的參數(shù)
def closure = { int a, String b ->
    println("a=${a} b=$证薇")
    //閉包返回值
    return a + b
}
//調(diào)用閉包   定義result變量不用寫(xiě)def也可以,666
result = closure.call(1, "name")
println(result)

//輸出
a=1 b=name
1name
  • 閉包使用call方法調(diào)起,需要傳入?yún)?shù)
  • 閉包定義時(shí)的參數(shù)類(lèi)型是可以省略的

4.4 List

比Java中的更加強(qiáng)大.當(dāng)遇到不會(huì)的方法的時(shí)候去查API文檔,比如下面的示例代碼中的each閉包,你肯定不知道閉包的參數(shù)是什么,這時(shí)我們打開(kāi),List的文檔地址,找到each方法,知道了原來(lái)是遍歷每個(gè)元素,參數(shù)是每個(gè)元素.

//list 可以存放不同的數(shù)據(jù)類(lèi)型
def list = [1, "test", true, 2.3]
list.each { item ->
    println(item)
}

list.each {
  println(it)
}

//輸出
1
test
true
2.3
  • 閉包的參數(shù)只有一個(gè)時(shí)是可以省略的,在里面使用時(shí)用it代替.和kotlin很像.
  • list支持list[1]這種形式的訪問(wèn)

4.5 Map

//空的map
def map1 = [:]
//
def map = ["id":1, "name":"xfhy"]

map['id'] = 2
println(map['id'])

map.id = "idStr"
println(map.id)

map.each { key, value ->
    println("key=${key} value=${value}")
}

map.each { entry ->
    println(entry)
}

//輸出
2
idStr
key=id value=idStr
key=name value=xfhy
id=idStr
name=xfhy
  • map支持map['id']訪問(wèn)和賦值
  • 也支持map.id訪問(wèn)和賦值
  • each遍歷支持2種閉包,使用方式如上,記不清楚沒(méi)關(guān)系,使用的時(shí)候去查API就行

4.6 IO

groovy的文件操作也是非常非常好使

def file = new File("D:/test.txt")
file.eachLine { line, lineNo ->
    println("第${lineNo}行 $line")
}

//輸出
第1行 name
第2行 age
第3行 book
  • 非常好用,簡(jiǎn)單直接地讀取文件內(nèi)容
  • 其他好用的API,請(qǐng)參閱這里

4.7 類(lèi)

class Book {
    String bookName
    double price
}

def book = new Book()
book.with {
    bookName = '字典'
    price = 24.5
}
println(book.bookName)
println(book.price)
book=null
println(book?.price)


//輸出
字典
24.5
null
  • 使用with操作符,可以對(duì)book對(duì)象內(nèi)部屬性進(jìn)行操作,調(diào)用方法等
  • 使用?可以避免空指針,免得判空.就像kotlin一樣,很棒.

5. 總結(jié)

我個(gè)人認(rèn)為,基礎(chǔ)掌握差不多這么多就行了,剩下的遇到了再查官方文檔.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末馁痴,一起剝皮案震驚了整個(gè)濱河市形娇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件伟骨,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡燃异,警方通過(guò)查閱死者的電腦和手機(jī)携狭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)回俐,“玉大人暑中,你說(shuō)我怎么就攤上這事壹瘟。” “怎么了鳄逾?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)灵莲。 經(jīng)常有香客問(wèn)我雕凹,道長(zhǎng),這世上最難降的妖魔是什么政冻? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任枚抵,我火速辦了婚禮,結(jié)果婚禮上明场,老公的妹妹穿的比我還像新娘汽摹。我一直安慰自己,他們只是感情好苦锨,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布逼泣。 她就那樣靜靜地躺著,像睡著了一般舟舒。 火紅的嫁衣襯著肌膚如雪拉庶。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,741評(píng)論 1 289
  • 那天秃励,我揣著相機(jī)與錄音氏仗,去河邊找鬼。 笑死夺鲜,一個(gè)胖子當(dāng)著我的面吹牛皆尔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播币励,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼慷蠕,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了榄审?” 一聲冷哼從身側(cè)響起砌们,我...
    開(kāi)封第一講書(shū)人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎搁进,沒(méi)想到半個(gè)月后浪感,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡饼问,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年影兽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片莱革。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡峻堰,死狀恐怖讹开,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情捐名,我是刑警寧澤旦万,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站镶蹋,受9級(jí)特大地震影響成艘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜贺归,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一淆两、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拂酣,春花似錦蚕键、人聲如沸序宦。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至尸诽,卻和暖如春甥材,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背性含。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工洲赵, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人商蕴。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓叠萍,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親绪商。 傳聞我的和親對(duì)象是個(gè)殘疾皇子苛谷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

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