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ǔ)法特性,開發(fā)者可以用腳本語(yǔ)言的形式來(lái)編寫代碼,但是其實(shí)底層還是把groovy編譯成java類,對(duì)于喜歡使用java且不太會(huì)python等腳本語(yǔ)言的開發(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

類型優(yōu)化

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

String value = "Hello World";

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

def value = "Hello World"

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

def message = "Hello World"
println message.class 

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

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

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

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

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

簡(jiǎn)寫

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類

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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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

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