一心肪、簡(jiǎn)介
? ? ? ? 我們都知道:Groovy 語(yǔ)法與Java 語(yǔ)言的語(yǔ)法很相似锭亏,雖然 Groovy 的語(yǔ)法源于SmallTalk和Ruby這類(lèi)語(yǔ)言的理念,但是可以將它想像成 Java 語(yǔ)言的一種更加簡(jiǎn)單硬鞍、表達(dá)能力更強(qiáng)的變體慧瘤。語(yǔ)法類(lèi)似于Java,大大簡(jiǎn)化了Android開(kāi)發(fā)人員的學(xué)習(xí)時(shí)間膳凝,該文章主要記錄自己作為Java開(kāi)發(fā)人員來(lái)學(xué)習(xí)Groovy語(yǔ)法碑隆。
二、語(yǔ)法集合
1蹬音、關(guān)鍵字
??????? 關(guān)鍵字是編程語(yǔ)言的漢語(yǔ)拼音的AOE和英語(yǔ)的ABC,下面列出groovy關(guān)鍵字:
2上煤、注釋
注釋主要有單行注釋、多行注釋著淆、文檔注釋劫狠。分別如下所示:
//這是單行注釋
/**
*這是多行注釋
*/
/**
*這是文檔注釋
*@paramotherPerson
*@return
*/
String start(String args) {
"Hello${args}"
}
??????? 其中文檔注釋的主要作用是:
? ? ? ? a、type definitions (classes, interfaces, enums, annotations):類(lèi)型定義(類(lèi)永部、接口独泞、枚舉、注解)
?? ? ?? b苔埋、fields and properties definitions:成員變量及屬性定義
? ? ? ? c懦砂、methods definitions:方法定義
3、標(biāo)識(shí)符
??????? 標(biāo)識(shí)符分為普通標(biāo)識(shí)符组橄、引用標(biāo)識(shí)符荞膘。
? ? ? ? a、普通標(biāo)識(shí)符:標(biāo)識(shí)符第一個(gè)字符可以是字母玉工、美元符號(hào)或者下劃線(xiàn)羽资,但是不能是數(shù)字。后面可以跟隨字母和數(shù)字遵班。下面看合法標(biāo)識(shí)符和非法標(biāo)識(shí)符:
//合法標(biāo)識(shí)符
def firstIdentifier;
def $secondIdentifier;
def _thirdIdentifier;
以及:
/**
*非法標(biāo)識(shí)符
*/
def 1firstIllegalIdenfier;
def second&Illegal*Identifier;
? ? b屠升、引用標(biāo)識(shí)符:將標(biāo)識(shí)符放在單引號(hào)潮改、多引號(hào)或者某些特殊字符(成對(duì)出現(xiàn)時(shí))中,可以被當(dāng)作引用標(biāo)識(shí)符:
/*單引號(hào)和多引號(hào)引用標(biāo)識(shí)符*/
def map=[:]
map."an identifier with a space and double quotes"="ALLOWED"
map.'with-dash-signs-and-single-quotes'="ALLOWED"
assert map."an identifier with a space and double quotes"=="ALLOWED"
assertmap.'with-dash-signs-and-single-quotes'=="ALLOWED"
以及
//特殊字符成對(duì)出現(xiàn)時(shí)的引用標(biāo)識(shí)符
map.'single quote'
map."double quote"
map.'''triple single quote'''
map."""triple double quote"""
map./slash string/
map.$/dollar slash string/$
4腹暖、字符串
??????? 字符串可以使用單引號(hào)'或雙引號(hào)"包括起來(lái)汇在。有幾種字符串:
a、普通字符串
/**
*普通字符串微服,類(lèi)似于Java字符串
*/
def str1 ="1234"
def str2 ='1234'
b禀横、多行字符串
/**
*多行字符串纵顾,有三個(gè)單引號(hào)或者多引號(hào)構(gòu)成厢钧,輸出時(shí)行數(shù)不變
*/
defstr3 ='''
line1
line2
line3
'''
注意:不論是單行還是多行字符串衫仑, 都可以使用反斜杠轉(zhuǎn)義字符偎窘。例如:
println? 'an escaped single quote:\'needs a backslash'
結(jié)果是:
an escaped single quote: ' needs a backslash
c固惯、內(nèi)插字符串:編譯器會(huì)把美元和花括號(hào)中的內(nèi)容替換成實(shí)際的值洲守,內(nèi)插字符串中還可以進(jìn)行表達(dá)式計(jì)算涡驮。
/**
*內(nèi)插字符串
*/
def name ='Groovy !'//普通字符串
def greeting ="Hello${name}"http://內(nèi)插字符串
println greeting/*打印結(jié)果:Hello Groovy !*/
當(dāng)內(nèi)插字符串可以由前后的符號(hào)區(qū)分出的時(shí)候魄缚,花括號(hào)可以省略宝与。
/**
*定義對(duì)象
*/
def person = [name:'lizihanglove',age:23]
//當(dāng)內(nèi)插字符串可以由前后的符號(hào)區(qū)分出的時(shí)候,花括號(hào)可以省略冶匹。
println "$person.name is $person.age years old!"
注意:當(dāng)使用內(nèi)插字符串的時(shí)候习劫,字符串字面值是Groovy的字符串類(lèi)型GString。這一點(diǎn)需要注意嚼隘。普通的Java字符串是不變的诽里,而GString是可變的。另外它們的哈希值也不同飞蛹。因此在使用Map等數(shù)據(jù)類(lèi)型的時(shí)候需要格外注意谤狡,避免使用GString作為Map的鍵。還有單引號(hào)及三個(gè)單引號(hào)是不能使用插值字符串的卧檐,下面是一些規(guī)則
??????? 上面列表中:
??????? interpolated表示是否支持插值墓懂,multiline表示是否支持多行,escape character表示轉(zhuǎn)義字符轉(zhuǎn)化時(shí)字符霉囚,如:
println? "line1\'line2"??????????????????????? //雙引號(hào)轉(zhuǎn)義字符用\
def str4 =$/ line1$/$ line2 /$?????????? //$/.../$字符串轉(zhuǎn)義結(jié)束符?$用$轉(zhuǎn)義
println str4????????????????????????????????????? //結(jié)果line1 /$ line2