原文: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程序员