原文:http://groovy.codehaus.org/Tutorial+1+-+Getting+started
譯者:puras
1.設置Java環境
Groovy需要Java,所以你需要有一個Java的可用版本(1.4或是更高).如果你還沒有安裝Java,可按照下面一步步的進行:
- 打開系統屬性面板
- 點擊高枝標簽
- 點擊環境變量按鈕
- 添加一個新的系統變量,名為JAVA_HOME和Java的安裝目錄(我的是:D:\Program Files\jdk1.6.0)
- 將%JAVA_HOME%\bin添加到你的系統路徑中(可選)
2.設置Groovy環境
從下載頁下載Groovy的安裝文件或是二進制文件,并跟隨說明安裝.(當前有一個問題是將Groovy安裝在Windows下時,安裝路徑中不能出現空格.所以,將默認的安裝路徑c:\Program Files\Groovy替換成類似于D:\groovy-1.0的路徑)
或者
- 從網站上獲取一個Croovy發行版,并將它復制到你的硬盤上
- 解壓Groovy的壓縮包,并將其放至到你硬盤上合適的位置.如D:\groovy-1.0-jsr-06
- 添加一個環境變量GROOVY_HOME,并將其值設置為你的Groovy的安裝目錄,我的是D:\groovy-1.0
- 打開命令提示符,輸入"set",查看返回的結果看設置是否正確
- 可將%GROOVY_HOME%\bin添加到你的系統路徑
- 嘗試雙擊打開Groovy發行版中的bin目錄下的groovyConsole.bat文件.如果它不能工作,打開命令提示符,將目錄轉到bin目錄下,再次執行它,看看有什么錯誤信息
3.設置可選的Jar文件
你也許想要獲得一些可選的Jar文件,或是對應于Groovy的模塊(詳細說明查看模塊的文檔),或是對應于想要用于Groovy的其他的Java類.下面列出了一些可能性:
讓Groovy知道你添加的Jar文件的一個推薦的方式是將它們放到一個預先確定的位置.你所安裝的Groovy應該包含一個名為"groovy-starter.conf"的文件.在這個文件中,在注釋的下面添加如下的一行:
load ${user.home}/.groovy/lib/*
"user.home"這個系統屬性由你的操作系統設置.(我的是c:\Document和Settings\puras.)現在將你的Jar文件放置到.groovy/lib目錄中.
注:做為另一種選擇,你可以設置一個CLASSPATH變量,并確定它包含了你所添加的Jar文件,否則Groovy將以空的或是沒有CLASSPATH變量來工作.
4.Hello World
在groovyConsole窗口的頂部(打開groovyConsole可以通過在Groovy下的bin中雙擊groovyConsole.bat文件,或是以命令提示符下輸入groovyConsole),輸入下面的代碼:
println "Hello, World!"
之后按下"Ctrl+R".
groovyConsole下部的窗口會顯示:
groovy> println "Hello, World!"
Hello, World!
(注:原文說打印出來的文字將在Window的命令窗口中顯示,就是groovyConsole后面的黑色的窗口,但在我的機器是直接顯示在groovyConsole下部的窗口中的,應該是原文所使用的Groovy的版本較老)
以"groovy>"開頭的一行文本是控制臺要處理的.而"Hello,World!"則是執行的結果.
接下來使用一些實際的值.用下面的一行來替換掉控制臺中的文本:
123+45*67
或是你喜歡的算術表達式,之后按下"Ctrl+R".(我將不再告訴你按下Ctrl+R,我想你已經知道該如何做了).之后結果的值會顯示在groovyConsole的下部窗口中.
5.變量
你可以為變量賦上值,以備之后使用.嘗試下面的:
x = 1
println x
x = new java.util.Date()
println x
x = -3.1499392
println x
x = false
println x
x = "Hi"
println x
6.Lists and Maps
Groovy中內置了兩種非常重要的數據類型:List和Map(List可以操作Java中的數組).Lists被用于存儲有序的集合數據.例如一個由你喜受的整型數組成的整型List,看起來像下面這樣:
myList = [1776, -1, 33, 99, 0, 928734928763]
你可以使用方括號來訪問List中存儲的條目(索引從0開始):
println myList[0]
輸出的結果應該是:
1776
你可以使用"size"方法來獲取List的長度:
println myList.size()
將輸出:
6
但通常你可能不需要這個長度,因為不像Java,循環一個List的首選方法是使用"each"方法,將在下面的"Code as Data"部門中講解.
另一個本地數據類型結構稱為Map.它被用于存儲"聯合數組"或是"字典".那是一個無序的不同種類數據的集合.例如,就說我們想存儲名字和智商,我們將會這樣做:
scores = [ "Brett":100, "Pete":"Did not finish", "Andrew":86.87934 ]
每個存儲在Map中的值都有不同的類型.Brett的是一個整型,Pete的是一個字符串,而Andrew則是一個浮點數.我們可以通過兩種主要的方式來訪問Map中的值:
println scores["Pete"]
println scores.Pete
將會輸出:
Did not finish
Did not finish
向一個Map中添加數據,語法與向一個List中添加數據相似.例如,如果Pete重新做了IQ測試,并得到了3,我們可以:
scores["Pete"] = 3
稍后我們再取它的值,它將是3
println scores["Pete"]
將輸出3.
另一方面,你可以用下面的方法來創建一個空的Map或是一個空的List:
emptyMap = [:]
emptyList = []
確認List為空,你可以執行下面的語句:
println emptyMap.size()
println emptyList.size()
將輸出List和Map的長度為0.
7.條件執行
在任何編程語言都非常重要的一個特征是在不同的條件下執行不同的代碼的能力.最簡單的方式是使用"if"結構.例如:
amPM = Calendar.getInstance().get(Calendar.AM_PM)
if (amPM == Calendar.AM)
{
println("Good morning")
} else {
println("Good evening")
}
不要擔心第一條語句,它僅僅是一些確定當前時間是中午之前還是之后的代碼.代碼執行的順序如下:首先是求括號里面的值,之后依靠這個值是"true"還是"false"來確定是執行第一還是第二塊代碼.查看下面的布爾表達式.
"else"塊不是必需的,但是"if"塊則是必需的:
amPM = Calendar.getInstance().get(Calendar.AM_PM)
if (amPM == Calendar.AM)
{
println("Have another cup of coffee.")
}
8.布爾表達式
在大多數的編程語言中都有一種特殊的數據類型,被用于表現真假值,"true"和"false".簡單的布爾表達式就是那些簡單的單詞.布爾值可以存儲在變量中,就像任何其他的數據類型一樣:
myBooleanVariable = true
一些復雜的布爾表達式可使用一些布爾操作符:
* ==
* !=
* >
* >=
* <
* <=
它們大部分都非常直觀.相等操作符是"==",要與賦值操作符"="區分開.與相等相反的是"!=",為不等.
下面是一些例子:
titanicBoxOffice = 1234600000
titanicDirector = "James Cameron"
trueLiesBoxOffice = 219000000
trueLiesDirector = "James Cameron"
returnOfTheKingBoxOffice = 752200000
returnOfTheKingDirector = "Peter Jackson"
theTwoTowersBoxOffice = 581200000
theTwoTowersDirector = "PeterJackson"
titanicBoxOffice > returnOfTheKingBoxOffice // evaluates to true
titanicBoxOffice >= returnOfTheKingBoxOffice // evaluates to true
titanicBoxOffice >= titanicBoxOffice // evaulates to true
titanicBoxOffice > titanicBoxOffice // evaulates to false
titanicBoxOffice + trueLiesBoxOffice < returnOfTheKingBoxOffice + theTwoTowersBoxOffice // evaluates to false
titanicDirector > returnOfTheKingDirector // evaluates to false, because "J" is before "P"
titanicDirector < returnOfTheKingDirector // evaluates to true
titanicDirector >= "James Cameron" // evaluates to true
titanicDirector == "James Cameron" // evaluates to true
在"if"結構中使用布爾表達式是非常有用的.例如:
if (titanicBoxOffice + trueLiesBoxOffice > returnOfTheKingBoxOffice + theTwoTowersBoxOffice)
{
println(titanicDirector + " is a better director than " + returnOfTheKingDirector)
}
一個非常有用的測試是測試一個值或是表達式是否為空(沒有值).例如,我們想看看一個給定的Key是否存在Map中:
suvMap = ["Acura MDX":"\$36,700", "Ford Explorer":"\$26,845"]
if (suvMap["Hummer H3"] != null)
{
println("A Hummer H3 will set you back "+suvMap["Hummer H3"]);
}
一般null被用于指出在一些位置上沒有值.
9.調試和解決問題
- 打印出你感興趣的變量的類可以使用myVar.getClass().之后查看那個類的文檔
- 如果你有一個讓人頭痛的復雜的表達式,先將它分解成簡單的表達式,并求值.之后再將它們組合成復雜的表達式
- 嘗試重新啟動groovyConsole(這將清除所有的變量,讓你重新開始)
- 從Groovy的User Guide中查看你所感興趣的主題
10.如果你是一個Java程序員