Groovy入門經典 隨書重點

1 數值和表達式

1.1數值 

  1. 整數是Integer類的實例
  2. 有小數部分的數值是BigDecimal類的實例

不一樣於java,沒有基礎數據類型 
一切皆對象的概念重於javajava

1.2表達式

  1. 兩個整數的除法運算一般會產生一個浮點數
  2. 得到兩個整型值相除的整數部分,使用#intdiv
  3. 浮點數取模非法

1.3運算優先級

*/% 優先於 +-正則表達式

1.4賦值

  1. def先聲明變量,後使用

    等同於js,弱類型express

  2. 標識符 和java同樣的命名規則

1.5自增和自減運算符

相似於java數組

1.6對象引用

動態類型this

變量引用的類型是在運行時肯定,而不是在編譯時,相似於java的多態 
也有垃圾回收機制,相似於java的spa

1.7關係運算符和等於運算符

關係運算符:< <= > >=經過#compareTo實現 
等於運算符:== !=調用#equals <=>調用#compareTocode

都是調用某個方法實現對象

2字符串和正則表達式

2.1字符串字面值

單引號:所見即所得 
雙引號:解釋性字符串 
三引號:解釋性字符串 多行文本用這個blog

單雙引號可混在一塊兒使用,相似js;也可使用\進行轉義,相似java索引

   

1 'He said "Hello"!'
2 'He said \"Hello\"!'

 

解釋性字符串中的${expression}都將被求值,結果做爲字符串的一部分

 
1 def age=25
2 'My age is ${age}'    //My age is ${age}
3 "My age is ${age}"    //My age is 25
4 """//My age is ${age}"""    //My age is 25
5 """My 
6 age 
7 is \${age}"""    //My age is ${age}

 

解釋用雙,其餘用單

2.2字符串索引和索引段

字符串是順序排列的字符集合

索引相似於java String的#charAt 
獲取指定位置的字符相似於數組

 
1 def greeting='Hello World'
2 greeting[4]        //o
3 greeting[-1]    //d
4 greeting[1..2]    //el
5 greeting[1..<3]        //el
6 greeting[4..2]        //oll
7 greeting[4,1,6]        //oew

 

2.3基本操做

字符串不可變

等同於java

 
1 def greeting='Hello world'
2 'Hello'+'world'        //Helloworld
3 'Hello'*3            //HelloHelloHello
4 greeting-'o world'    //Hell
5 greeting.size()        //11
6 greeting.length()    //11
7 greeting.count('o')        //2
8 greeting.contains('ell')    //true

 

2.4字符串方法

1 def message='Hello'
2 message.center(11)    //返回長度爲11,左右兩邊均使用空格填充的字符串
3 message.center(3)
4 message.center(11,'#')
5 message.eachMatch('.')

 

2.5比較字符串

== 調用#equals 
<==> 調用#compareTo

2.6正則表達式

  1. ~’regex’定義正則表達式

    def regex=~’cheese’

  2. if(‘cheesecake’=~’cheese’) //左邊String對象和右邊的正則匹配,返回布爾值

==~ 精確匹配 ‘cheesecake’==~’cheese’

\\\\在正則中表示一個反斜槓字符

相似於java中正則的使用,用單引號括起 
也能夠用js的方法,直接使用,不用引號

1 def matcher="\$abc."=~\\\$(.*)\\.
2 def matcher="\$abc."=~/\$(.*)\./

 

3列表、映射和範圍

3.1列表

相似於java的List,增長了一些本身的方法

  1. 列表對象和訪問列表元素

    1 def numbers=[11,12,13,14] 
    2 number[0] //11 
    3 number[-1] //14

     

[]調用List類的#getAt

1 number[0..2]    //[11,12,13]
2 number[1..<3]    //[12,13]

 

相似於前面的String訪問

包含邊界的索引範圍訪問,產生一個新的列表對象

<<  把新元素追加到列表末尾 調用#leftShift
 +   鏈接兩個列表          調用#plus
 -   從列表刪除元素        調用#minus
 number[1]=[33,44]        調用#putAt

3.2映射

相似於java的Map

  1. 訪問 調用#getAt

    1 def names=[‘ken’:’Barclay,’John’:’Savage’] 
    2 def divisors=[4:[2],6:[3,2],12:[6,4,3,2]] 
    3 names[‘Ken’] //第一種訪問寫法 
    4 names.Ken //第二種訪問寫法 
    5 divisors[6]

     

  2. 賦值 調用#putAt

    1 divisors[6]=[6,3,2,1]

     

  3. 聲明

    [:] 空映射

若是某個元素的關鍵字是變量,將被解釋成一個String

1 def x=1
2 def y=2
3 def m=[x:y,y:x]   //m=['x':2,'y':1]

 

3.3映射方法

1 def map=['ken':2745,'john':2746,'sally':2742]
2 map.get('david',9999)    //9999
3 map.get('sally')        //2742
4 map.keySet()            //[david,ken,sally,john]
5 mp['ken']                //2745
6 mp.values.asList()

 

3.4範圍

 1 def twentiethCentury=1900..1999
 2 def reverseTen=10..1
 3 twentiethCentury.size()
 4 twentiethCentury.get(0)
 5 twentiethCentury.getFrom()
 6 twentiethCentury.getTo()
 7 twentiethCentury.contains(2000)
 8 twentiethCentury.subList(0,5)
 9 reverseTen[]2
10 reverseTen.isReverse

 

4基本輸入和輸出

4.1基本輸出

 1 print "My name is"
 2 print("MaYiwen")
 3 println()
 4 //My name is MaYiwen
 5 def age=25
 6 prinln "My age is:{age}"
 7 
 8 def numbers=[1,2,3,4]
 9 def staffTel=['ken':2745,'john':2746,'jessie':2772]
10 println "Numbers:${numbers}"
11 println "Staff telephone:${staffTel}"
12 //Numbers:[1,2,3,4]
13 //Staff telephone:['ken':2745,'john':2746,'jessie':2772]

 

4.2格式化輸出

1 printf

 

相似java

5 方 法

5.1 方法

相似js 方法沒有返回值

5.2 方法參數

參數不須要指明類型,只須要在括號中放變量名就能夠

1 def methodName(para1,para2,para3){}

 

5.3 默認參數

方法中的形參能夠指定爲默認參數

1 def someMethod(para1,para2=0,para3=0){}
2 someMethod方法能夠經過一個、兩個或者三個實參調用,至少提供一個實參

 

5.4 方法返回值

return 可選,省略了,代碼的最後一條語句的值就是方法的返回值

5.5 參數傳遞

值傳遞

相似於java

5.6 做用域

5.7 集合做爲參數和返回值

流程控制

6.1 while語句

相似於java

6.2 for語句

相似於java

7類

getter和#setter都是groovy類的隱含方法

1 class Account{
2     def number
3     def balance
4 }
5 def accounts=[new Account(number:'abc123',balance:1200),
6 new Account(number:'pqr456',balance:200)]
7 accounts.each{acc->println acc}

 

在java中,account類一般包含初始化類對象的構造器方法。在groovy中並不須要作次工做,只須要使用new操做符和指定的參數便可替代。 
在groovy中一樣也有構造器方法。

 1 class Account{
 2     def number
 3     def balance
 4     def Account(number,balance){
 5         this.number=number
 6         this.balance=balance
 7     }
 8 }
 9 def accounts=[new Account('abc123',1200),new Account('pqr456',200)]
10 def account=new Account(number:'abc123',balance:1200)//報錯

相似於java,提供構造器會覆蓋默認構造器,因此上面第10行調用默認構造器的代碼報錯

相關文章
相關標籤/搜索