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