Groovy学习笔记一(初体验)

Groovy初体验

本节主要介绍groovy的背景,编译、运行,并在IDE和编译器中使用groovy。

1、groovy背景

groovy是作者James Strachan在学习python的过程中喜欢上了这门语言,但是他本人主攻语言是java,然后产生了一个想要赋予java一些类似于python的特性的念头。就这样groovy语言的主要方向就被定义了`更加丰富的特性和比java更友好的语言,为已经十分成熟的平台带来动态语言的特性`。(如图1.1所示)

图1.1

1.1、groovy的概念

groovy是在java平台上的、具有像python、Ruby和smalltalk语言特性的灵活动态语言,groovy保证了这些特性像java一样被java开发者使用。

groovy不是脚本语言

groovy可以被编译成java字节码,然后集成到java应用程序中或者web应用程序,groovy是十分灵活的。

groovy与java

groovy的许多代码是使用java实现的,其余部分是用groovy实现的,可以理解groovy为特殊的java程序,在java平台上的所有强大功能,包括大量的java类库都可以直接在groovy中直接使用。

1.2、groovy与java的密切性

与java运行时环境无缝集成、与java相似的语法。

无缝集成

groovy运行在java虚拟机,java的类库也可以直接在groovy中使用,groovy仅仅是创建java类的一种新的途径——通过在运行时创建,可以理解为groovy是使用了额外jar文件作为以来的java。图1.2可以显示展示情况。

图1.2

所以,从groovy中直接调用java没有温和问题。当使用groovy开发的时候,每个goovy的类型都是一个对象(`即所有的groovy对象都是java.lang.Object的子类`)。    
当要在java中使用groovy的时候,可以预先编译groovy为字节码文件,然后通过java的方式直接使用即可,JVM是不知道运行的代码是java还是groovy编写的。

相似的语法

groovy的语法是非常友好的,可以通过少量的代码做想用的事情。

下面比较一下groovy和java获取日期的代码。

//java
import java.utils.*;
Date today=new Date();
//groovy
today=new Date();

从上述代码中可以看出,groovy没有导包,并且代码类似于java语法。

1.3、特性丰富的语言

groovy在java上又三个主要的特性:GDK、Language、Library,下图展示了三者之间的关系。

图1.3

上图中展示除了groovy的三个重要特性,阴影部分为三个特性之间的相互引用关系,三个库中有很多是相关依赖的,因为groovy语言的代码很少独立使用一个特性

2、groovy能做什么?

groovy可以为不同场景下的程序员提供服务。

2.1、为java内行人士提供服务

可以简化java代码,并达到相同的效果。

2.2、对脚本编写人员提供服务

java在市场的占有率为groovy提供了更好的发展前景,并且groovy可以直接作为脚本语言使用。

2.3、为敏捷开发人员提供服务

groovy可以作为脚本语言使用;
groovy可以无缝集成java代码,成本更低;
groovy可以作为单元测试的代码;
groovy可以使用更少的代码做相同的事情;

3、groovy的运行

下面讲对groovy代码进行不同方式的运行,并在IDE或编辑器中使用groovy。

运行groovy的命令
|命令|描述|
|—|—|
|groovysh|开始groovysh命令运行shell,它用来交互式执行groovy代码,在shell中一行行的输入语言或者整个代码,通过go命令立即执行。|
|groovyConsole|运行一个图形界面用来交互执行groovy代码:此外,groovyConsole也可以加载和运行groovy脚本文件。|
|groovy|开始解释执行groovy脚本,单行groovy脚本可以作为命令行参数来运行|

3.1、使用groovysh

在shell中直接运行groovysh命令,下图为使用groovysh运行的界面截图。

图1.4

从上图中可以看出,在groovhsh环境下,直接可以输出”Hello World”语句,并且可以保存变量并赋值,而且体现出了和传统java语法的不同及groovy操作字符串的强大之处。

笔者也是groovy的入门开发者,暂时对groovysh不过多介绍,以后有机会会专门对其撰写一片说明文章。

3.2、使用groovyConsole

groovyConsole是一个swing界面,是一个小型的groovy交互式解释程序。groovyConsole不支持groovysh所支持的命令行选项。下图为groovyConsole的启动页面。

图1.5

3.3、使用groovy命令

groovy命令用来执行groovy程序和脚本,下面将举例并使用groovy命令运行groovy代码。

图1.6
图1.7
从上图中可以看出,使用groovy运行脚本的时候不用带上.groovy后缀,.groovy后缀是作为groovy脚本的一种约定,一个groovy脚本不一定要使用该后缀,但是不使用的时候必须要带上文件的完整名称才行。同时,groovy不一定要使用脚本文件运行,单行的groovy脚本也可以直接通过groovy命令进行运行

4、编译和运行groovy

在上面使用的过程中,都是直接执行并没有产生任何可执行文件,在本节中将接触到另一种使用groovy的方式,编译成java字节码文件并作为正常的java应用程序运行子啊java虚拟机中,即预编译模式,其实和之前的方式原理上都是相同的,都是通过java虚拟机运行字节码文件,只不过一个保存在磁盘上一个保存在内存中。

4.1、使用groovyc编译groovy

groovyc的使用类似与javac,在使用的时候会生成一个字节码文件,我们还是用1.3.3中的文件做例子。

图1.8
从上图中可以看出,使用groovyc运行后产生了字节码文件。

本系列文参均为书籍Gradle in action的读书笔记。
本文中的部分实例及图片均来自于该书籍。
在本文Ubuntu环境下开发的。