Groovy 快速开始

红薯 发布于 2011/11/08 14:59
阅读 2K+
收藏 2

设置你的java环境

Groovy 需要 Java, 因此你需要有一个有效的版本(1.4 或者更高的版本是必需的),如果你尚未安装java,那么以下是你要做的步骤:

  • 从站点 http://java.sun.com 获取最新版的 Java  发行版
  • 运行安装者
  • 设置JAVA_HOME 环境变量. 在Windows平台里,步骤如下:
    • 打开系统"控制面板"
    •  单击"高级"选项卡
    • 单击"环境变量" 按钮
    • 添加一个名称为"JAVA_HOME" 的新的系统环境变量,并且将你的Java的安装目录作为它的值 (例如,我的是 C:\Program Files\Java\jdk1.5.0_04)
    • 你也可以添加 %JAVA_HOME%\bin到你的系统的PATH变量中
      (Note: as an alternative to setting a system environment variable, you can create yourself a '.bat' or '.cmd' file which sets the variable. You then need to run that batch file in any console window in which you wish to run Java and double clicking on '.bat' or '.cmd' files containing Java invocation instructions won't work. If you are unsure about what this means, follow the earlier instructions.)
      Note: JDK 1.5 is required for version 1.1-rc-1. In earlier versions of JDK (notably 1.4.2) the compiller throws an exception:
      *nested exception is org.codehaus.groovy.runtime.InvokerInvocationException: java.lang.NoSuchMethodError: java.lang.String.replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
      The method "replace" was introduced in JDK 1.5 and is not supportedin earlier versions. This is also a reason why GRails framework doesn't run on JRE 1.4

设置你的Groovy环境变量

从下载页面下载Groovy安装器或者二进制包,并且跟着介绍进行安装即可。(当前有一个问题,就是在windows下,你的安装路径不能含有空格,即,要将其缺省的安装路径"c:\Program Files\Groovy" 改成象"c:\Groovy"这样的路径)

或者这样

  • 从站点上得到Groovy发行版的copy,并且copy它到你硬盘上的某个地方。
  • 解压缩这个groovy包到你硬盘的某个空间,如我的在 C:\dev\groovy-1.0-jsr-06
  • 设置GROOVY_HOME环境变量. 在Windows下,作如下步骤:
    • 添中新的系统环境变量GROOVY_HOME 并且将值设为你的groovy安装的路径( 我的是 C:\dev\groovy-1.0-jsr-06)
    • 打开命令行窗口,并且键入"set" 然后打回车,查看你的环境变量设置是否已经正确。
  • 可选的,你也可以添加 %GROOVY_HOME%\bin 到你的PATH环境变量中
  • 通过双击试着运行groovyConsole.bat。如果它不能工作,打开一人命令行窗口,将目录改变到bin目录,并且运行它看他返回什么错误信息。

设置可选的 jar 文件

你也许希望获得可选的jar文件,即对Groovy用到的相应的Groovy模块或者相应的其它的java类。下面列出了一些可能用到的:

名称 来自 描述
jtds-version.jar http://jtds.sourceforge.net SQL Server 和 Sybase的数据库驱动
hsqldb-version.jar http://www.hsqldb.org/ HSQLDB(一个 100% java数据库)的数据库驱动

一个好的建议是将额外的jar文件 都放在一个事先定义的地方,你的Groovy的安装应该包括一个名叫groovy-starter.con的文件,在这个文件里,确信有这样一行 load ${user.home}/.groovy/lib/*

没有被注释掉t. 那个 user.home系统属性是你的操作系统设定的. (我的是 C:\Document and Settings\paul.)现在简单的将你的jar文件放在 .groovy/lib 目录中。
(注意: 作为一个替代方案, 你可以设置 CLASSPATH 环境变量并且确认它指明了你的额外的jar 文件,然而,Groovy对于一个空的或者没有GLASSPATH,一样工作的很好。)

Hello, World

在 groovyConsole运行窗口的顶部,键入println  "Hello, World!"
并且键入 <CTRL-R>.
注意,在控制台窗口中(即 groovyConsole窗口前面的黑色的那个),文体得到打印并且  groovyConsole的下部显示 :
groovy> println "Hello, World!"
null
  以"groovy>"开头的行正是控制台处理的文本. "null" 是表达式的值. 因为表达式没有任何值可以打印 ,所以groovyConsole打印为"null"
接下来,再试一些实际的值,用下面的字符串来替换控制台里的文本:
123+45*67
或者你喜欢的任何表达式然后按<CTRL-R>(后面不再说明需要按<CTRL-R>,我想你懂的)。现在, groovyConsole下面打印的值有更多的含义。

变量

你可以给要使用的变量赋值。尝试一下:

x = 1
println x

x = new java.util.Date()
println x

x = -3.1499392
println x

x = false
println x

x = "Hi"
println x 

Lists 和 Maps

Groovy 中提供了对这两种重要数据类型 - lists 和 maps - 的原生支持(Lists 可以像在 Java 中操作数组那样使用)。

Lists 用来保存相同类型数据的有序集合。例如一个整数类型数据 List大概是这样子:myList = [1776, -1, 33, 99, 0, 928734928763]
你可以通过方括号“[]”及下标(下标是从0开始的)的方式和来访问 List 中的数据:
println myList[0]
输出:
1776
可以通过 size 方法获得 List 的长度:
println myList.size()
输出:
6
不过,一般不需要使用 List 的长度。因为和 Java 中不同,这里遍历 List 中的数据首选的方法是 each 方法。具体会在“Code as Data”一节中描述。

另一个内置的数据结构是 Map。它用来保存“关联的数组”或者“字典”数据集合,这些数据是已命名的,数据类型可以不同而且是无序的。例如,我们想保存一些人的IQ分数:
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 是否为空,可以使用 size 方法:
println emptyMap.size()
println emptyList.size()
对于空的 Map 和 List 输出的 size 是 0。

条件语句

程序语言的一个重要特性就是可以根据不同的条件执行不同的代码。最常用的就是“if”语句。例如:

amPM = Calendar.getInstance().get(Calendar.AM_PM)
if (amPM == Calendar.AM)
{
    println("Good morning")
} else {
    println("Good evening")
}

第一行获取现在是上午还是下午。剩下的执行过程如下:首先求表达式的值,然后根据这个值是‘true’还是‘false’来决定是执行哪块代码。参考下面的“布尔表达式”章节。
注意,必须有 “then” 代码块,但不一定有 “else” 代码块:

amPM = Calendar.getInstance().get(Calendar.AM_PM)
if (amPM == Calendar.AM)
{
    println("Have another cup of coffee.")
}

布尔表达式

大多数编程语言中都有这么一种特殊的数据类型,它用来表示真值‘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)
    }


    经常需要检查一个变量或者表达式是不是空(没有值),比如我们想看一下 Map 中没有指定的 key:

    suvMap = \[\]
    if (suvMap[ "Hummer H3" ] \!= null )
    {
         println( "A Hummer H3 will set you back " +suvMap[ "Hummer H3" ]);
    }


    一般使用 null 来表示没有值。

调试技巧

  • 用 myVar.getClass() 可以打印出变量的类型,然后再查找关于这个类的文档。
  • 如果表达式太复杂,可以分解为多个简单的表达式分别求值,再将它们组合成复杂的表达式。
  • 尝试重新启动 groovyConsole(这会清除所有变量,你可以重新开始写代码)。
  • 浏览 Groovy 用户手册中你感兴趣的章节。

如果你是 Java 开发人员

  • 或许你想看一下“与 Java 的区别”
  • 还有一些事需要注意

文章来源:http://docs.codehaus.org/pages/viewpage.action?pageId=107347983

加载中
0
ddatsh
ddatsh

看了一篇文,下面很多评论

http://nooalou.iteye.com/blog/162710

 

 

0
叫我蝴蝶吧
叫我蝴蝶吧
关键是groovy到底能在什么样的商业项目中扮演什么样的角色,目前有什么成功的案例没有?我只关心这个,而不是语法。。
0
嘿哟传说
嘿哟传说
应该都像是python那种“胶水”的角色哈
0
韭菜根
韭菜根
我一直在用grails,感觉还不错。 不过关键代码仍需要用java来写,grails太慢了
0
opal
opal
其实,java6自带的javascript引擎是非常不错的,稍做整合,前、后台都可以用js编写,node.js也不需要了,java的类库也能用,性能也很不错
0
潛龍勿用
在resin下,早就可以直接編譯執行javascript腳本寫的服務器端程序了,java6只不過是將caucho公司實現了好多年的東西納入了標準而已。
返回顶部
顶部