一、簡(jiǎn)介
? ? ? ? 我們都知道:Groovy 語(yǔ)法與Java 語(yǔ)言的語(yǔ)法很相似,雖然 Groovy 的語(yǔ)法源于SmallTalk和Ruby這類語(yǔ)言的理念,但是可以將它想像成 Java 語(yǔ)言的一種更加簡(jiǎn)單、表達(dá)能力更強(qiáng)的變體。語(yǔ)法類似于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):類型定義(類、接口、枚舉、注解)
?? ? ?? 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)或者下劃線,但是不能是數(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、普通字符串
/**
*普通字符串,類似于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的字符串類型GString。這一點(diǎn)需要注意。普通的Java字符串是不變的,而GString是可變的。另外它們的哈希值也不同。因此在使用Map等數(shù)據(jù)類型的時(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