一咪笑、Groovy語法(一):基礎(chǔ)語法

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方法來源
  1. java.lang.String原有的方法
  2. DefaultGroovyMethods:是Groovy對所有對象的一個(gè)擴(kuò)展
  3. 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玖详、條件邏輯
  1. 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é)果包含空格)
  1. 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)邏輯
  1. while循環(huán)
與java中的while循環(huán)一致
def sum = 0
while(sum<10){
    println sum++
}
  1. 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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末脚牍,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子巢墅,更是在濱河造成了極大的恐慌诸狭,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件君纫,死亡現(xiàn)場離奇詭異驯遇,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蓄髓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門叉庐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人双吆,你說我怎么就攤上這事眨唬』崆埃” “怎么了好乐?”我有些...
    開封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長瓦宜。 經(jīng)常有香客問我蔚万,道長,這世上最難降的妖魔是什么临庇? 我笑而不...
    開封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任反璃,我火速辦了婚禮,結(jié)果婚禮上假夺,老公的妹妹穿的比我還像新娘淮蜈。我一直安慰自己,他們只是感情好已卷,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開白布粥庄。 她就那樣靜靜地躺著锥腻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上膘流,一...
    開封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音廓奕,去河邊找鬼茴她。 笑死,一個(gè)胖子當(dāng)著我的面吹牛晌坤,可吹牛的內(nèi)容都是我干的逢艘。 我是一名探鬼主播旦袋,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼埋虹!你這毒婦竟也來了猜憎?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬榮一對情侶失蹤搔课,失蹤者是張志新(化名)和其女友劉穎胰柑,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體爬泥,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡柬讨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了袍啡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片踩官。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖境输,靈堂內(nèi)的尸體忽然破棺而出蔗牡,到底是詐尸還是另有隱情,我是刑警寧澤嗅剖,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布辩越,位于F島的核電站,受9級(jí)特大地震影響信粮,放射性物質(zhì)發(fā)生泄漏黔攒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一强缘、第九天 我趴在偏房一處隱蔽的房頂上張望督惰。 院中可真熱鬧,春花似錦旅掂、人聲如沸赏胚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽觉阅。三九已至,卻和暖如春称龙,著一層夾襖步出監(jiān)牢的瞬間留拾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來泰國打工鲫尊, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留痴柔,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓疫向,卻偏偏與公主長得像咳蔚,于是被迫代替她去往敵國和親豪嚎。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 什么是 Groovy谈火? 簡言之侈询,Groovy是一種基于JVM(Java虛擬機(jī))的敏捷動(dòng)態(tài)開發(fā)語言。它是一種成熟的面...
    北緯26閱讀 4,120評(píng)論 0 14
  • 一糯耍、快捷鍵 ctr+b 執(zhí)行ctr+/ 單行注釋ctr+c ...
    o_8319閱讀 5,793評(píng)論 2 16
  • 一扔字、Python簡介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡介】: Python 是一個(gè)...
    _小老虎_閱讀 5,723評(píng)論 0 10
  • 1)、程序結(jié)構(gòu):主要是用來還原處理問題的過程的温技! ?順序結(jié)構(gòu):處理問題的步驟?選擇結(jié)構(gòu):處理問題的條件?循環(huán)結(jié)構(gòu):...
    命運(yùn)丿閱讀 895評(píng)論 0 0
  • 這是讀完王安憶的《長恨歌》的感覺革为。即使是疼痛,也不是死去活來的痛舵鳞,也不是痛徹心扉的痛震檩。盡管是逝去的錦繡年華...
    阿霞吶閱讀 211評(píng)論 0 0