Groovy入門(mén)篇--Getting started
Posted on 2007-08-15 12:43 puras 閱讀(2656) 評(píng)論(1) 編輯 收藏 所屬分類(lèi): Groovy原文:http://groovy.codehaus.org/Tutorial+1+-+Getting+started
譯者:puras
1.設(shè)置Java環(huán)境
Groovy需要Java,所以你需要有一個(gè)Java的可用版本(1.4或是更高).如果你還沒(méi)有安裝Java,可按照下面一步步的進(jìn)行:
- 從http://java.sun.com上獲取最近的Java的發(fā)行版
- 執(zhí)行安裝程序
- 設(shè)置JAVA_HOME環(huán)境變量.在Window上的話(huà),參照下面的步驟:
- 打開(kāi)系統(tǒng)屬性面板
- 點(diǎn)擊高枝標(biāo)簽
- 點(diǎn)擊環(huán)境變量按鈕
- 添加一個(gè)新的系統(tǒng)變量,名為JAVA_HOME和Java的安裝目錄(我的是:D:\Program Files\jdk1.6.0)
- 將%JAVA_HOME%\bin添加到你的系統(tǒng)路徑中(可選)
2.設(shè)置Groovy環(huán)境
從下載頁(yè)下載Groovy的安裝文件或是二進(jìn)制文件,并跟隨說(shuō)明安裝.(當(dāng)前有一個(gè)問(wèn)題是將Groovy安裝在Windows下時(shí),安裝路徑中不能出現(xiàn)空格.所以,將默認(rèn)的安裝路徑c:\Program Files\Groovy替換成類(lèi)似于D:\groovy-1.0的路徑)
或者
- 從網(wǎng)站上獲取一個(gè)Croovy發(fā)行版,并將它復(fù)制到你的硬盤(pán)上
- 解壓Groovy的壓縮包,并將其放至到你硬盤(pán)上合適的位置.如D:\groovy-1.0-jsr-06
- 添加一個(gè)環(huán)境變量GROOVY_HOME,并將其值設(shè)置為你的Groovy的安裝目錄,我的是D:\groovy-1.0
- 打開(kāi)命令提示符,輸入"set",查看返回的結(jié)果看設(shè)置是否正確
- 可將%GROOVY_HOME%\bin添加到你的系統(tǒng)路徑
- 嘗試雙擊打開(kāi)Groovy發(fā)行版中的bin目錄下的groovyConsole.bat文件.如果它不能工作,打開(kāi)命令提示符,將目錄轉(zhuǎn)到bin目錄下,再次執(zhí)行它,看看有什么錯(cuò)誤信息
3.設(shè)置可選的Jar文件
你也許想要獲得一些可選的Jar文件,或是對(duì)應(yīng)于Groovy的模塊(詳細(xì)說(shuō)明查看模塊的文檔),或是對(duì)應(yīng)于想要用于Groovy的其他的Java類(lèi).下面列出了一些可能性:
名稱(chēng) | 來(lái)自于 | 描述 |
jtds-version.jar | SQL Server和/或Sybase的數(shù)據(jù)庫(kù)驅(qū)動(dòng) | |
hsqldb-version.jar | http://www.hsqldb.org/ | HSQLDB的數(shù)據(jù)庫(kù)驅(qū)動(dòng),一個(gè)100%的Java數(shù)據(jù)庫(kù) |
讓Groovy知道你添加的Jar文件的一個(gè)推薦的方式是將它們放到一個(gè)預(yù)先確定的位置.你所安裝的Groovy應(yīng)該包含一個(gè)名為"groovy-starter.conf"的文件.在這個(gè)文件中,在注釋的下面添加如下的一行:
load ${user.home}/.groovy/lib/*
"user.home"這個(gè)系統(tǒng)屬性由你的操作系統(tǒng)設(shè)置.(我的是c:\Document和Settings\puras.)現(xiàn)在將你的Jar文件放置到.groovy/lib目錄中.
注:做為另一種選擇,你可以設(shè)置一個(gè)CLASSPATH變量,并確定它包含了你所添加的Jar文件,否則Groovy將以空的或是沒(méi)有CLASSPATH變量來(lái)工作.
4.Hello World
在groovyConsole窗口的頂部(打開(kāi)groovyConsole可以通過(guò)在Groovy下的bin中雙擊groovyConsole.bat文件,或是以命令提示符下輸入groovyConsole),輸入下面的代碼:
println "Hello, World!"
之后按下"Ctrl+R".
groovyConsole下部的窗口會(huì)顯示:
groovy> println "Hello, World!"
Hello, World!
(注:原文說(shuō)打印出來(lái)的文字將在Window的命令窗口中顯示,就是groovyConsole后面的黑色的窗口,但在我的機(jī)器是直接顯示在groovyConsole下部的窗口中的,應(yīng)該是原文所使用的Groovy的版本較老)
以"groovy>"開(kāi)頭的一行文本是控制臺(tái)要處理的.而"Hello,World!"則是執(zhí)行的結(jié)果.
接下來(lái)使用一些實(shí)際的值.用下面的一行來(lái)替換掉控制臺(tái)中的文本:
123+45*67
或是你喜歡的算術(shù)表達(dá)式,之后按下"Ctrl+R".(我將不再告訴你按下Ctrl+R,我想你已經(jīng)知道該如何做了).之后結(jié)果的值會(huì)顯示在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中內(nèi)置了兩種非常重要的數(shù)據(jù)類(lèi)型:List和Map(List可以操作Java中的數(shù)組).Lists被用于存儲(chǔ)有序的集合數(shù)據(jù).例如一個(gè)由你喜受的整型數(shù)組成的整型List,看起來(lái)像下面這樣:
myList = [1776, -1, 33, 99, 0, 928734928763]
你可以使用方括號(hào)來(lái)訪問(wèn)List中存儲(chǔ)的條目(索引從0開(kāi)始):
println myList[0]
輸出的結(jié)果應(yīng)該是:
1776
你可以使用"size"方法來(lái)獲取List的長(zhǎng)度:
println myList.size()
將輸出:
6
但通常你可能不需要這個(gè)長(zhǎng)度,因?yàn)椴幌馢ava,循環(huán)一個(gè)List的首選方法是使用"each"方法,將在下面的"Code as Data"部門(mén)中講解.
另一個(gè)本地?cái)?shù)據(jù)類(lèi)型結(jié)構(gòu)稱(chēng)為Map.它被用于存儲(chǔ)"聯(lián)合數(shù)組"或是"字典".那是一個(gè)無(wú)序的不同種類(lèi)數(shù)據(jù)的集合.例如,就說(shuō)我們想存儲(chǔ)名字和智商,我們將會(huì)這樣做:
scores = [ "Brett":100, "Pete":"Did not finish", "Andrew":86.87934 ]
每個(gè)存儲(chǔ)在Map中的值都有不同的類(lèi)型.Brett的是一個(gè)整型,Pete的是一個(gè)字符串,而Andrew則是一個(gè)浮點(diǎn)數(shù).我們可以通過(guò)兩種主要的方式來(lái)訪問(wèn)Map中的值:
println scores["Pete"]
println scores.Pete
將會(huì)輸出:
Did not finish
Did not finish
向一個(gè)Map中添加數(shù)據(jù),語(yǔ)法與向一個(gè)List中添加數(shù)據(jù)相似.例如,如果Pete重新做了IQ測(cè)試,并得到了3,我們可以:
scores["Pete"] = 3
稍后我們?cè)偃∷闹?它將是3
println scores["Pete"]
將輸出3.
另一方面,你可以用下面的方法來(lái)創(chuàng)建一個(gè)空的Map或是一個(gè)空的List:
emptyMap = [:]
emptyList = []
確認(rèn)List為空,你可以執(zhí)行下面的語(yǔ)句:
println emptyMap.size()
println emptyList.size()
將輸出List和Map的長(zhǎng)度為0.
7.條件執(zhí)行
在任何編程語(yǔ)言都非常重要的一個(gè)特征是在不同的條件下執(zhí)行不同的代碼的能力.最簡(jiǎn)單的方式是使用"if"結(jié)構(gòu).例如:
amPM = Calendar.getInstance().get(Calendar.AM_PM)
if (amPM == Calendar.AM)
{
println("Good morning")
} else {
println("Good evening")
}
不要擔(dān)心第一條語(yǔ)句,它僅僅是一些確定當(dāng)前時(shí)間是中午之前還是之后的代碼.代碼執(zhí)行的順序如下:首先是求括號(hào)里面的值,之后依靠這個(gè)值是"true"還是"false"來(lái)確定是執(zhí)行第一還是第二塊代碼.查看下面的布爾表達(dá)式.
"else"塊不是必需的,但是"if"塊則是必需的:
amPM = Calendar.getInstance().get(Calendar.AM_PM)
if (amPM == Calendar.AM)
{
println("Have another cup of coffee.")
}
8.布爾表達(dá)式
在大多數(shù)的編程語(yǔ)言中都有一種特殊的數(shù)據(jù)類(lèi)型,被用于表現(xiàn)真假值,"true"和"false".簡(jiǎn)單的布爾表達(dá)式就是那些簡(jiǎn)單的單詞.布爾值可以存儲(chǔ)在變量中,就像任何其他的數(shù)據(jù)類(lèi)型一樣:
myBooleanVariable = true
一些復(fù)雜的布爾表達(dá)式可使用一些布爾操作符:
* ==
* !=
* >
* >=
* <
* <=
它們大部分都非常直觀.相等操作符是"==",要與賦值操作符"="區(qū)分開(kāi).與相等相反的是"!=",為不等.
下面是一些例子:
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"結(jié)構(gòu)中使用布爾表達(dá)式是非常有用的.例如:
if (titanicBoxOffice + trueLiesBoxOffice > returnOfTheKingBoxOffice + theTwoTowersBoxOffice)
{
println(titanicDirector + " is a better director than " + returnOfTheKingDirector)
}
一個(gè)非常有用的測(cè)試是測(cè)試一個(gè)值或是表達(dá)式是否為空(沒(méi)有值).例如,我們想看看一個(gè)給定的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被用于指出在一些位置上沒(méi)有值.
9.調(diào)試和解決問(wèn)題
- 打印出你感興趣的變量的類(lèi)可以使用myVar.getClass().之后查看那個(gè)類(lèi)的文檔
- 如果你有一個(gè)讓人頭痛的復(fù)雜的表達(dá)式,先將它分解成簡(jiǎn)單的表達(dá)式,并求值.之后再將它們組合成復(fù)雜的表達(dá)式
- 嘗試重新啟動(dòng)groovyConsole(這將清除所有的變量,讓你重新開(kāi)始)
- 從Groovy的User Guide中查看你所感興趣的主題
10.如果你是一個(gè)Java程序員
- 你可能需要查看Differences from Java
- 同樣,有少許需要記住的事情