Default style (Cherry Eve). Switch styles (Capricorn). Atom Feed Calendar
http://www.javaworld.com.tw/roller/ray_linn/date/20060124 星期二 一月 24, 2006

Groovy 前言

前言

Groovy 是基于 JRE 的脚本语言( Script ),和Perl,Python等等脚本语言一样,它能以快速简洁的方式来完成一些工作:如访问数据库,编写单元测试用例(Unit Test Case),快速实现产品原型等等。

Groovy 是由James Strachan 和 Bob McWhirter 这两位天才发明的,(JSR 241 2004 年 3 月)。Groovy 完全以Java API为基础,使用了Java开发人员最熟悉的功能和库。Groovy 的语法近似Java,并吸收了 Ruby 的一些特点,因此 Groovy 在某些场合可以扮演一种 “咖啡伴侣”的角色。

那么Groovy 和 Java 相比,有什么变化呢? Groovy 通过以下方式提供了一种敏捷的开发方式:

  • 不用编译。
  • 允许动态类型。
  • 合成结构容易。 其脚本可以在普通 Java 应用程序中使用。
  • 提供一个 shell 解析器。

这些特性使Groovy 成为一种特别容易学习和使用的语言. 我们先借用IBM Groovy教程中的例子,下面的代码利用了Freemarker模板引擎来创建一个Template对象,然后将内容打印到标准输出。例(1)是Java代码,例(2)是Groovy代码。可以看到二者非常的类似。

<code>
//简单的 TemplateReader Java 类
import java.io.File;
import java.io.IOException;
import freemarker.template.Configuration;
import freemarker.template.Template;
public class TemplateReader { 
   public static void main(String[] args){ 
       
try{ 
           
Configuration cfg = Configuration.getDefaultConfiguration();
           cfg.setDirectoryForTemplateLoading(new File("C:\\dev\\projects\\http-tester\\src\\conf"));
           Template temp = cfg.getTemplate("vendor-request.tmpl"); 
           System.out.println(temp.toString());
       } catch(IOException e){
          
e.printStackTrace();
       } 
   }
}
</code>

和例2 中的 Groovy 作为对比.

<pre><code>
//用 Groovy 编写的更简单的 TemplateReader
//语法目前基于Groovy 1.0-JSR3
import freemarker.template.Configuration as tconf
import java.io.File cfg = tconf.getDefaultConfiguration()
cfg.setDirectoryForTemplateLoading( new File("C:\\dev\\projects\\http-tester\\src\\conf"))
temp = cfg.getTemplate("vendor-request.tmpl")
println temp.toString()
</code></pre>

Groovy显然精简得多:

  • Groovy 代码只需要更少的import 语句。此外,freemarker.template.Configuration 还使用了别名 tconf。
  • Groovy 允许直接使用类型为Template 的变量 tmpl 而不用声明其类型。
  • Groovy 不需要class 声明或者main 方法。
  • Groovy 不关心异常,可以不用导入Java需要的IOException。

对Groovy感兴趣吗?别忘了拜访它的主页 http://groovy.codehaus.org/ 并下载最新的Groovy发布包哦。(ray_linn)

本文以Groovy1.0-JSR3为基础,如果您发现任何章节与当前之JSR冲突或者无法运行之脚本,可以和我联系: ray_linn@hotmail.com.