Groovy基礎(chǔ)語法

1.實(shí)現(xiàn)循環(huán)的方式

1.for in

for(i in 0..2){
   print 'hello world'
}
  1. upto
0.upto(2){
    print '$it'
}

3.times

3.times{
    print '$it'
}

安全導(dǎo)航操作符

1.null檢查處理

def foo(str){
    str?.reverse()
}

println foo('evil')
println foo(null)
輸出結(jié)果為
live
null

使用?.在空引用上調(diào)用reverse(),其結(jié)果產(chǎn)生了一個(gè)null,而沒有拋出空指針異常

基礎(chǔ)語法

1.return語句總是可選的

int add(a,b){
     a+b
}
等同于
int add(a,b){
    return a+b
}

2.分號(hào)分隔語句總是可選的
3.方法和類默認(rèn)為public
4.?.操作符只有對(duì)象引用不為空時(shí)才分派調(diào)用
5.函數(shù)引用可以不加()

def variable1 = 1   //可以不使用分號(hào)結(jié)尾  
def varable2 = "友盟分享"  
int x = 1  //變量定義時(shí),也可以直接指定類型
println 'hello world' //引用println函數(shù)

String

1.單引號(hào)''中的內(nèi)容嚴(yán)格對(duì)應(yīng)Java中的String,不對(duì)$符號(hào)進(jìn)行轉(zhuǎn)義

defsingleQuote='I am $ dolloar'  //輸出就是I am $ dolloar

2.雙引號(hào)""的內(nèi)容則和腳本語言的處理有點(diǎn)像,如果字符中有$號(hào)的話,則它會(huì)$表達(dá)式先求值。

def aaa = "aaa" //輸出aaa
def x = 1  
def result = "I am $x person" //輸出I am 1 person

3.三個(gè)引號(hào)'''xxx'''中的字符串支持隨意換行 比如

   defmultieLines = ''' begin  
     line  1  
     line  2  
     end '''

函數(shù)

1.可選形參

def log(x,base=10){
    x*base
}
println 11
println 11,100
println 100,10
如輸出結(jié)果所示,Groovy使用可選形參填充了缺失的實(shí)參
110
1100
1000

2.多賦值

def spilteName(fullName){fullName.spilt(' ')}

def(firstName,secondName) = spilteName('James Bond')
println "$secondName $firstName $secondName"
如輸出所示
Bond James Bond

動(dòng)態(tài)類型

1.靜態(tài)類型

def takeHelp(Man man){
    man.help()
}

class Man{

    def help(){
        println 'man help'
    }
}

2.動(dòng)態(tài)類型

def takeHelp(man){
    man.help()
}

class Man{

    def help(){
        println 'man help'
    }
}

class Women{
    def help(){
        println 'women help'
    }
}

class Elephant{
    def help(){
        println 'elephant help'  
    }
}
下面調(diào)用takeHelp()
takeHelp(new Man())
takeHelp(new Women())
takeHelp(new Elephant())
如下輸出所示
man help
women help
elephant help

閉包

def pikeEven(n,block){
    for(int i=2;i<n:i+=2){
         block(i)
    }
}

pickEvent(10){number-> println(number)}

容器類

Groovy中的容器類很簡(jiǎn)單,就三種:
List:鏈表,其底層對(duì)應(yīng)Java中的List接口,一般用ArrayList作為真正的實(shí)現(xiàn)類。
Map:鍵-值表,其底層對(duì)應(yīng)Java中的LinkedHashMap。
Range:范圍,它其實(shí)是List的一種拓展。
下面會(huì)舉一些例子:
List

def aList = [5,'string',true] //List由[]定義,其元素可以是任何對(duì)象  
變量存取:可以直接通過索引存取,而且不用擔(dān)心索引越界。如果索引超過當(dāng)前鏈表長度,List會(huì)自動(dòng)  
往該索引添加元素  
assert aList[1] == 'string'  
assert aList[5] == null //第6個(gè)元素為空  
aList[100] = 100 //設(shè)置第101個(gè)元素的值為10  
assert aList[100] == 100  
那么,aList到現(xiàn)在為止有多少個(gè)元素呢?  
println aList.size  ===>結(jié)果是101

Map

def aMap = ['key1':'value1','key2':true]  
/*Map由[:]定義,注意其中的冒號(hào)。冒號(hào)左邊是key,右邊是Value。key必須是字符串,value可以是任何對(duì)象。另外,key可以用''或""包起來,也可以不用引號(hào)包起來。比如  */
def aNewMap = [key1:"value",key2:true]//其中的key1和key2默認(rèn)被  
處理成字符串"key1"和"key2"  
/*不過Key要是不使用引號(hào)包起來的話,也會(huì)帶來一定混淆,比如  */
def key1="wowo"  
def aConfusedMap=[key1:"who am i?"]  
/*aConfuseMap中的key1到底是"key1"還是變量key1的值“wowo”?顯然,答案是字符串"key1"。如果要是"wowo"的話,則aConfusedMap的定義必須設(shè)置成:  */
def aConfusedMap=[(key1):"who am i?"]  
/*Map中元素的存取更加方便,它支持多種方法:  */
println aMap.keyName  //  <==這種表達(dá)方法好像key就是aMap的一個(gè)成員變量一樣  
println aMap['keyName']// <==這種表達(dá)方法更傳統(tǒng)一點(diǎn)  
aMap.anotherkey = "i am map"  //<==為map添加新元素

Rang

def aRange = 1..5 //<==Range類型的變量 由begin值+兩個(gè)點(diǎn)+end值表示左邊這個(gè)aRange包含1,2,3,4,5這5個(gè)值  如果不想包含最后一個(gè)元素,則  
def aRangeWithoutEnd = 1..<5  //<==包含1,2,3,4這4個(gè)元素  
println aRange.from  
println aRange.to
最后編輯于
?著作權(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)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,537評(píng)論 19 139
  • 前言 人生苦多,快來 Kotlin ,快速學(xué)習(xí)Kotlin! 什么是Kotlin? Kotlin 是種靜態(tài)類型編程...
    任半生囂狂閱讀 26,686評(píng)論 9 118
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,641評(píng)論 18 399
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 4,190評(píng)論 1 10
  • You are…… You are the rain, the fog, it's the sun of my h...
    橘子君_瀾閱讀 1,050評(píng)論 0 3

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