為了后面講述方面,這里先介紹一些前提知識(shí)。初期接觸可能有些別扭,看習(xí)慣就好了。
def variable1 = 1 //可以不使用分號(hào)結(jié)尾
def varable2 = "I am a person"
def int x = 1 //變量定義時(shí),也可以直接指定類型
String testFunction(arg1,arg2){//無(wú)需指定參數(shù)類型
...
}
//無(wú)類型的函數(shù)定義,必須使用 def 關(guān)鍵字
def nonReturnTypeFunc(){
last_line //最后一行代碼的執(zhí)行結(jié)果就是本函數(shù)的返回值
}
//如果指定了函數(shù)返回類型,則可不必加 def 關(guān)鍵字來(lái)定義函數(shù)
String getString(){
return "I am a string"
}
其實(shí),所謂的無(wú)返回類型的函數(shù),我估計(jì)內(nèi)部都是按返回 Object 類型來(lái)處理的。畢竟,Groovy 是基于 Java 的,而且最終會(huì)轉(zhuǎn)成 Java Code 運(yùn)行在 JVM 上
//下面這個(gè)函數(shù)的返回值是字符串"getSomething return value"
def getSomething(){
"getSomething return value" //如果這是最后一行代碼,則返回類型為 String
1000 //如果這是最后一行代碼,則返回類型為 Integer
}
注意,如果函數(shù)定義時(shí)候指明了返回值類型的話,函數(shù)中則必須返回正確的數(shù)據(jù)類型,否則運(yùn)行時(shí)報(bào)錯(cuò)。如果使用了動(dòng)態(tài)類型的話,你就可以返回任何類型了。
1 單引號(hào)''中的內(nèi)容嚴(yán)格對(duì)應(yīng) Java 中的 String,不對(duì)$符號(hào)進(jìn)行轉(zhuǎn)義
def singleQuote='I am $ dolloar' //輸出就是 I am $ dolloar
2 雙引號(hào)""的內(nèi)容則和腳本語(yǔ)言的處理有點(diǎn)像,如果字符中有$號(hào)的話,則它會(huì)$表達(dá)式先求值。
def doubleQuoteWithoutDollar = "I am one dollar" //輸出 I am one dollar
def x = 1
def doubleQuoteWithDollar = "I am $x dolloar" //輸出 I am 1 dolloar
3 三個(gè)引號(hào)'''xxx'''中的字符串支持隨意換行 比如
def multieLines = ''' begin
line 1
line 2
end '''
println("test") ---> println "test"
注意,雖然寫代碼的時(shí)候,對(duì)于函數(shù)調(diào)用可以不帶括號(hào),但是 Groovy 經(jīng)常把屬性和函數(shù)調(diào)用混淆。比如
def getSomething(){
"hello"
}
getSomething() //如果不加括號(hào)的話,Groovy 會(huì)誤認(rèn)為 getSomething 是一個(gè)變量。比如:
http://wiki.jikexueyuan.com/project/deep-android-gradle/images/4.jpg" alt="" />
所以,調(diào)用函數(shù)要不要帶括號(hào),我個(gè)人意見(jiàn)是如果這個(gè)函數(shù)是 Groovy API 或者 Gradle API 中比較常用的,比如 println,就可以不帶括號(hào)。否則還是帶括號(hào)。Groovy 自己也沒(méi)有太好的辦法解決這個(gè)問(wèn)題,只能兵來(lái)將擋水來(lái)土掩了。
好了,了解上面一些基礎(chǔ)知識(shí)后,我們?cè)俳榻B點(diǎn)深入的內(nèi)容。