Groovy學習(一)

        用了一段時間的ruby再回來繼續看Java,感受在語法的優雅程度以及完成相同的功能所須要的代碼量確實都相差甚遠,不過好在如今java虛擬機上運行的程序也不必定要徹底用java語言來開發,打算嘗試下jvm上的多語言編程,備選目標有JRuby、Scala和Groovy,考慮到只是爲了和Java語言協助開發,同時考慮到對Java框架的支持,以及發現intellij idea不須要額外插件就支持Groovy,就選擇了Groovy進行學習。
java

數值:

Groovy支持整數和浮點數,沒有小數點的數值默認爲整數,都是Integer類的實例,包含正數、負數和零;有小數點爲浮點數,是BigDecimal類的實例,必須避免以小數點開始。正則表達式

表達式:

須要特殊注意的是,整數除以整數獲得的結果必定是一個浮點數,若是想要只取整數部分值,使用intdiv方法,如:編程

13.intdiv(5)結果是2;求模運算中包含浮點數是非法的,會提示mod方法被錯誤地調用。ruby

運算符:

(1)Groovy運算符都是對象某方法的重載,如:
框架

  • 5 + 3   =>  5.plus(3)jvm

  • 5 - 3    => 5.minus(3)ide

  • 5 * 3    => 5.multiply(3)學習

  • 5 / 3    => 5.divide(3)idea

  • 5 % 3   => 5.mod(3)spa

(2)運算符優先級相對於C語言沒什麼特殊

變量申明:

Groovy使用def來申明一個變量,變量命名規則:

  • 必須由字母和數字組成

  • 大小寫敏感

  • 首字母必須是字母

  • 下劃線容許出如今命名中,以字母看待

  • 不容許爲關鍵字

字符串:

(1)Groovy除了可使用單引號(')和雙引號(")來封裝字符串外還支持三引號("""),三引號表示字符串包含多行文本與ruby的here doc相似,如

"""hello
Groovy
and
Java"""

同時,單引號中的字符串不能用內插,規則與ruby相同,如:

def age = 24
'My age is ${age}'        //My age is ${age}
"My age is ${age}"       //My age is 24
"""My age is ${age}""" //My age is 24
"My age is \${age}"       //My age is ${age}

(2)經過字符索引獲取子字符串,支持以下幾種格式:

def str = "Hello world"
str[4]         //o
str[-1]       //d
str[1..2]    //el
str[1..<3] //el
str[4..2]   //oll
str[4,1,6] //oew

(3)字符串的基本方法:

def str = "Hello world"
'Hello' + ' world'    //Hello world
'Hello' * 3              //HelloHelloHello
str - 'o world'        //Hell
str.size()                //11
str.length()           //11
str.count('o')        //2
str.contains('ell')  //true
str.leftShift(' world') //Helloworld, 等價於str << ' world'

同Java的String對象同樣Groovy的字符串值不可改變

Groovy經過包含附加方法的方式擴展了JDK中的類,String類也多了許多實用方法,詳細見API

(3)字符串的比較:

str 1 == str2,等價於str1.equal(str2);str1 <=>  str2,等價於str1.compareTo(str2)

(4)正則表達式:

Java中使用正則表達式主要是matches方法和replaceAll方法,Groovy中也可使用,如:

"abc".matches("abc")     //true
    "abc".matches("bc")       //false
    "abc".replaceAll("bc", "")//"a"

同時Groovy支持~來定義以及匹配正則表達式:

class Test {
    static main(args) {
        def regex = ~'hello';//定義正則表達式, ~緊接則字符串雙引號單引號均可以
        def matcher =  ("hello world" =~ "hello");//建立一個Matcher對象,~緊跟在=後面
        println regex.class;//class java.util.regex.Pattern
        println regex;//hello, 等價於regex.toString;
        println matcher;//java.util.regex.Matcher[pattern=hello region=0,11 lastmatch=hello], matcher.toString()
        println matcher.find();//true
        println matcher.matches();//false
        if ("hello world" =~ regex) {
            println true;//會打印出true
        }
        if ("hello world" =~ "hello") {
            println true;//會打印出true
        }
    }
}

能夠看出if或者while中的=~ 其實至關於"string".find("sring2"或者Regex對像),而Groovy還提供了另外一個匹配符 ==~ ,至關於String的matches方法。

正則表達式的^ $ * +等的運用這裏就不作描述了,有興趣的請自行產考正則表達式用法。

相關文章
相關標籤/搜索