Groovy基礎(chǔ)語法
1.Groovy中的變量
- 1.1、變量的類型:基本類型(java中的int,float,double,byte,char,long,short)和對象類型(String等) (Groovy中最終都是對象類型)
int x = 10
println x.class //結(jié)果為:class java.lang.Integer
double y = 3.14
println y.class //結(jié)果為:class java.lang.Double
//由此可見娄涩,Groovy中的基本類型最終會(huì)被編譯器包裝成對象類型
- 1.2窗怒、變量的定義:強(qiáng)類型定義方式和弱類型def定義方式
def x1 = 10
def y1 = 3.14
def str = 'groovy study'
println x1.class //class java.lang.Integer
println y1.class //class java.math.BigDecimal
println str.class //class java.lang.String
//強(qiáng)類型定義及定義的時(shí)候?qū)懨髯兞康念愋陀掣鴇ef則由編譯器自行推導(dǎo)變量的類型
- 強(qiáng)類型定義方式和弱類型def定義方式的選擇:
變量就是應(yīng)用于自己的類或者自己的模塊而不會(huì)應(yīng)用于其它類或者其他模塊,推薦使用def類型扬虚,這樣可以隨時(shí)動(dòng)態(tài)的轉(zhuǎn)換為其它類型努隙;
變量要用于其它類或是其它模塊,強(qiáng)烈建議使用強(qiáng)類型定義方式辜昵。使用強(qiáng)類型定義的方式不能動(dòng)態(tài)轉(zhuǎn)換類型荸镊,才能使外界傳入或者調(diào)用的時(shí)候不會(huì)對于數(shù)據(jù)的類型產(chǎn)生疑惑,這樣就保證外界傳入的數(shù)據(jù)一定是我們想要的正確的類型的數(shù)據(jù)堪置。
def x1 = 10
println x1.class //class java.lang.Integer
x1 = "dynamic type conversion"
println x1.class // class java.lang.String
// def定義的類型躬存,相當(dāng)于Object類型,可以隨時(shí)轉(zhuǎn)換類型
2舀锨、字符串詳解
- 2.1岭洲、String:和java中的String一樣
- 2.2、GString
- 2.2.1 常用的三種定義方式
- 單引號(hào)定義:
//1.單引號(hào)定義的就是java中的String坎匿,內(nèi)容即為''內(nèi)的字符串盾剩,并且不可更改
def str = 'a single string'
println str.class //class java.lang.String
//有特殊字符同樣的通過反斜杠轉(zhuǎn)義
def str1 = 'a single \'special\' string'
- 三個(gè)單引號(hào)定義:
//2.三個(gè)單引號(hào)定義的是有格式的字符串,會(huì)直接按照我們寫的格式進(jìn)行輸出替蔬,而不用像java中進(jìn)行拼接
def trebleStr = '''line one
line two
line three '''
def trebleStr2 = '''
line one
line two
line three '''
def trebleStr3 = '''\
line one
line two
line three '''
println trebleStr
println trebleStr2
println trebleStr3
println trebleStr.class //class java.lang.String
/* trebleStr2比trebleStr多了一行空格告私,trebleStr3與trebleStr結(jié)果相同
line one
line two
line three
line one
line two
line three
line one
line two
line three
*/
//注意上面trebleStr、trebleStr2承桥、trebleStr3的區(qū)別
- 雙引號(hào)定義(最常用的方式):可擴(kuò)展的字符串
def name = "Groovy"
println name.class //class java.lang.String
def sayHello = "Hello $name"
println sayHello //輸出:Hello Groovy
println sayHello.class //class org.codehaus.groovy.runtime.GStringImpl
//擴(kuò)展內(nèi)容還可以是表達(dá)式
def sum = "the sum of 2 and 3 equals ${2 + 3}"
println sum //輸出:the sum of 2 and 3 equals 5
//String 和 GString之間可以相互調(diào)用和傳遞驻粟,不需要考慮它們之間的轉(zhuǎn)換問題
- 2.3、String方法來源
-
java.lang.String原有的方法
- DefaultGroovyMethods:是Groovy對所有對象的一個(gè)擴(kuò)展
- StringGroovyMethods:繼承自DefaultGroovyMethods凶异,重寫了DefaultGroovyMethods中的許多方法格嗅,使這些方法更加適用于String使用
- 2.4、Groovy中常用的String方法
2.4.1.普通類型參數(shù)
- 字符串填充:
// center(Number numberOfChars,CharSequence padding) ,將字符串作為中心進(jìn)行填充
def str = "groovy"
println str.center(5,"a") //結(jié)果:groovy
println str.center(6,"a") //結(jié)果:groovy
println str.center(7,"a") //結(jié)果:groovya
println str.center(8,"a") //結(jié)果:agroovya
println str.center(9,"a") //結(jié)果:agroovyaa
println str.center(8) //結(jié)果: groovy 唠帝,不傳padding代表以空格填充
//PS:當(dāng)numberOfChars小于或等于str本身的長度時(shí)屯掖,不進(jìn)行填充操作,大于則用pandding擴(kuò)展至長度numberOfChars襟衰,從字符串的右邊(尾)進(jìn)行填充贴铜,再到左邊(頭)
//padLeft(Number numberOfChars,CharSequence padding) ,在字符串的左邊進(jìn)行填充
//c. padRight(Number numberOfChars,CharSequence padding),在字符串的右邊進(jìn)行填充
- 字符串比較
def str = "groovy"
def str2 = "Groovy"
println str.compareTo(str2) //32 結(jié)果大于0,str大于Str2
println str.compareToIgnoreCase(str2) //0 結(jié)果等于0瀑晒,str等于忽略大小寫的Str
println str2.compareTo(str) //-32 結(jié)果小于0绍坝,str2小于str
println str > str2 //true 可用操作符直接進(jìn)行比較
println str == str2.toLowerCase() //true
- 獲取字符串中的字符
def str = "groovy"
println str.getAt(0) //g
println str.getAt(0..1) //gr
println str[0] //g
println str[0..1] //gr
- 字符串中的減法(取差集)
def str = "groovy"
def str2 = "hello"
def str3 = "hello groovy"
def str4 = "groovy hello "
println str.minus(str2) //groovy, str中沒有包含str2
println str.minus(str3) //groovy, str中沒有包含str3
println str3.minus(str2) // groovy, str3中包含了str2 (注意結(jié)果包含了空格)
println str3.minus(str4) //hello groovy str3z中沒有包含str4
println str3 - str //hello ,str3z中包含了str(注意結(jié)果包含了空格)
- 其它還有很多方法用到時(shí)看看即可
def str = "hello groovy"
println str.reverse() //yvoorg olleh,字符串反轉(zhuǎn)
println str.capitalize()//Hello groovy,首字母大寫
println str.isNumber() //false,是否全是數(shù)字
def str2 = "1234"
println str2.toInteger() //1234
println str2.toBigDecimal() // 1234
println str2.toDouble() //1234.0
//等一系列轉(zhuǎn)化類型方法
2.4.2.閉包類型參數(shù)
方法中將閉包作為參數(shù)使用苔悦,可到閉包使用講解中查看
3轩褐、邏輯控制
- 3.1、順序邏輯
//單步往下執(zhí)行
def name = "groovy"
println "hello $name"
- 3.2玖详、條件邏輯
- if/else
//與java中一致
def name = "hello groovy"
String subHello(String str) {
if (str.contains("hello")) {
return str - "hello"
} else {
return str
}
}
println subHello(name) // groovy(注意結(jié)果包含空格)
- switch/case
//java中switch只能傳入int類型把介、byte,char和short類型能自動(dòng)提升為int類型勤讽、String類型和后來擴(kuò)展的enum類型
//在groovy中,switch可以傳入任性類型的數(shù)據(jù)進(jìn)行匹配
String judgeType(Object x) {
def result
switch (x) {
case "string":
result = "x is string"
break
case [4, 5, 6, 7,'inList']: //列表(數(shù)據(jù)結(jié)構(gòu)中講解)
result = "x is in list [4, 5, 6, 7,'inList']"
break
case 10..15: //范圍range(數(shù)據(jù)結(jié)構(gòu)中講解)
result = "x is in range 10..15"
break
case Integer:
result = "x is Integer"
break
case BigDecimal:
result = "x is BigDecimal"
break
case List:
result = "x is List"
break
default:
result = "no match"
break
}
return result
}
def x = "string"
def x1 = 5
def x2 = 10
def x3 = 3
def x4 = 3.14
def x5 =[4,6]
def x6 ="hi groovy"
def x7 = "inList"
println judgeType(x) //x is string
println judgeType(x1) // x is in list [4, 5, 6, 7,'inList']
println judgeType(x2) // x is in range 10..15
println judgeType(x3) // x is Integer
println judgeType(x4) // x is BigDecimal
println judgeType(x5) // x is List
println judgeType(x6) // no match
println judgeType(x7) // x is in list [4, 5, 6, 7,'inList']
- 3.3拗踢、循環(huán)邏輯
- while循環(huán)
與java中的while循環(huán)一致
def sum = 0
while(sum<10){
println sum++
}
- for循環(huán)
/*
*范圍中的for循環(huán)
*/
def sum = 0
for (i in 0..9) {
sum += i
}
println sum //45
sum = 0
/*
*list中的for循環(huán)
*/
for (i in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) {
sum += i
}
println sum //45
/*
*map中的for循環(huán)
*/
for (i in ['java': 1, ' groovy': 2, 'python': 3]) {
println "key:${i.key} value:${i.value}"
}
//key:java value:1
//key: groovy value:2
//key:python value:3