Groovy的基礎語法

Groovy 的語法融合了 Ruby、Python 和 Smalltalk 的一些最有用的功能,同時保留了基於 Java 語言的核心語法。
對於Java 開發人員,Groovy 提供了更簡單的替代語言,且幾乎不需要學習時間。

語句

Groovy的語句和Java類似,但是有一些特殊的地方。例如語句的分號是可選的。如果每行一個語句,就可以省略分號;

如果一行上有多個語句,則需要用分號來分隔。

x = [1, 2, 3]
println x y = 5; x = y + 7
println x
assert x == 12

另外return關鍵字在方法的最後是可選的;同樣,返回類型也是可選(缺省是Object)。

變量

1、沒有類型的java

作爲動態語言,groovy中所有的變量都是對象(類似於.net framework,所有對象繼承自java.lang.Object),

在聲明一個變量時,groovy不要求強制類型聲明,僅僅要求變量名前使用關鍵字def。

def var="hello world"

println var

println var.class

你可以看到程序最後輸出了var的實際類型爲:java.lang.String

作爲例外,方法參數和循環變量的聲明不需要def。

2、不需要的public

你可以把main方法前面的public去掉,實際上,groovy中默認的修飾符就是public,所以public修飾符你根本就不需要寫,這點跟java不一樣。

3一切皆對象

聽起來象是“衆生平等”的味道,事實上groovy對於對象是什麼類型並不關心,一個變量的類型在運行中隨時可以改變,一切根據需要而定。

如果你賦給它boolean ,那麼不管它原來是什麼類型,它接受boolean值之後就會自動把類型轉變爲boolean值。看下面的代碼:

def var="hello "+

       "world"+

       ",groovy!"

       println var;

       println var.class;

       var=1001

       println var.class

輸出結果:

hello world,groovy!

class java.lang.String

class java.lang.Integer

 

var這個變量在程序運行中,類型在改變。一開始給它賦值String,它的類型就是String,後面給它賦值Integer,它又轉變爲Integer。

循環

代碼:

       def var="hello "+

       "world"+

       ",groovy!"

       def repeat(val){

            for(i = 0; i < 5; i++){

             println val

            }

       }

       repeat(var)

輸出:

hello world,groovy!

hello world,groovy!

hello world,groovy!

hello world,groovy!

hello world,groovy!

注意循環變量i前面沒有def。當然也沒有java中常見的int,但如果你非要加上int也不會有錯,

因爲從Groovy1.1beta2之後開始(不包括1.1beta2),groovy開始支持java經典的for循環寫法。

此外,上面的for語句還可以寫成:

            for(i in 0..5)

這樣的結果是一樣的。 

範圍

這個跟pascal中的“子界”是一樣的。在前面的for循環介紹中我們已經使用過的for(i in 0..5)這樣的用法,其中的0..5就是一個範圍。

範圍 是一系列的值。例如 “0..4” 表明包含 整數 0、1、2、3、4。Groovy 還支持排除範圍,“0..<4” 表示 0、1、2、3。還可以創建字符範圍:“a..e” 相當於 a、b、c、d、e。“a..<e” 包括小於 e 的所有值。

範圍主要在for循環中使用。

       

集合

Groovy支持最常見的兩個java集合:java.util.Collection和java.util.Map。前面所說的範圍實際也是集合的一種(java.util.List)。

(1) Collection

Groovy 中這樣來定義一個Collection:

def collect=["a","b","c"]

除了聲明時往集合中添加元素外,還可以用以下方式向集合中添加元素:

collect.add(1);

       collect<<"come on";

       collect[collect.size()]=100.0

Collection使用類似數組下標的方式進行檢索:

       println collect[collect.size()-1]

       println collect[5]

groovy支持負索引:

println collect[-1]      //索引其倒數第1個元素

       println collect[-2]      //索引其倒數第2個元素

Collection支持集合運算:

collect=collect+5        //在集合中添加元素5

       println collect[collect.size()-1]

       collect=collect-'a'         //在集合中減去元素a(1)

       println collect[0]          //現在第1個元素變成b

同樣地,你可以往集合中添加另一個集合或刪除一個集合:

       collect=collect-collect[0..4]   //把集合中的前5個元素去掉

       println collect[0]   //現在集合中僅有一個元素,即原來的最後一個元素

       println collect[-1]  //也可以用負索引,證明最後一個元素就是第一個元素

(2) Map

Map是“鍵-值”對的集合,在groovy中,鍵不一定是String,可以是任何對象(實際上Groovy中的Map就是java.util.Linke dHashMap)。

如此可以定義一個Map:

       def map=['name':'john','age':14,'sex':'boy']

添加項:

       map=map+['weight':25]       //添加john的體重

       map.put('length',1.27)      //添加john的身高

       map.father='Keller'         //添加john的父親

可以用兩種方式檢索值:

       println map['father']       //通過key作爲下標索引

       println map.length          //通過key作爲成員名索引

字符串

Groovy中的字符串允許使用雙引號和單引號。

當使用雙引號時,可以在字符串內嵌入一些運算式,Groovy允許您使用 與 bash 類似的 ${expression} 語法進行替換。可以在字符串中包含任意的Groovy表達式。

 name="James"
 println "My name is ${name},'00${6+1}'" //prints My name is James,'007'

Groovy還支持"uXXXX" 引用(其中X是16進制數),用來表示特殊字符,例如 "u0040" 與"@"字符相同。

對字符串的操作

  1. contains 字符串中是否包含子字符串,'groovy'.contains('oo')將返回true;
  2. count 返回字符串中子字符串出現的次數,'groooovy'.count('oo')將返回3.
  3. tokenize 根據分隔符將字符串分解成子串,'apple^banana^grap'.tokenize('^')返回['apple','banana','grape']。
  4. 減操作 'groovy'-'oo',結果是'grvy'。
  5. 乘操作 'oo'*3,結果是'oooooo'。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章