鍍金池/ 教程/ Android/ 一些前提知識
Groovy 介紹
腳本類、文件 I/O 和 XML 操作
更多
一些前提知識
Gradle 工作流程
基本組件
題外話
總結(jié)
Gradle 編程模型及 API 實例詳解
閉包
Gradle 介紹
閑言構(gòu)建
Groovy 中的數(shù)據(jù)類型

一些前提知識

一些前提知識

為了后面講述方面,這里先介紹一些前提知識。初期接觸可能有些別扭,看習慣就好了。

  • Groovy 注釋標記和 Java 一樣,支持//或者/**/
  • Groovy 語句可以不用分號結(jié)尾。Groovy 為了盡量減少代碼的輸入,確實煞費苦心
  • Groovy 中支持動態(tài)類型,即定義變量的時候可以不指定其類型。Groovy 中,變量定義可以使用關(guān)鍵字 def。注意,雖然 def 不是必須的,但是為了代碼清晰,建議還是使用 def 關(guān)鍵字
def variable1 = 1   //可以不使用分號結(jié)尾  
def varable2 = "I am a person"
def  int x = 1   //變量定義時,也可以直接指定類型  
  • 函數(shù)定義時,參數(shù)的類型也可以不指定。比如
String testFunction(arg1,arg2){//無需指定參數(shù)類型  
  ...
}
  • 除了變量定義可以不指定類型外,Groovy 中函數(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ù)返回值:Groovy 的函數(shù)里,可以不使用 return xxx 來設置 xxx 為函數(shù)返回值。如果不使用 return 語句的話,則函數(shù)里最后一句代碼的執(zhí)行結(jié)果被設置成返回值。比如
//下面這個函數(shù)的返回值是字符串"getSomething return value"
def getSomething(){
      "getSomething return value" //如果這是最后一行代碼,則返回類型為 String
      1000 //如果這是最后一行代碼,則返回類型為 Integer
}

注意,如果函數(shù)定義時候指明了返回值類型的話,函數(shù)中則必須返回正確的數(shù)據(jù)類型,否則運行時報錯。如果使用了動態(tài)類型的話,你就可以返回任何類型了。

  • Groovy 對字符串支持相當強大,充分吸收了一些腳本語言的優(yōu)點:
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 '''
  • 最后,除了每行代碼不用加分號外,Groovy 中函數(shù)調(diào)用的時候還可以不加括號。比如:
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)容。