1. groovy是什么

  • 简介
  • 一. groovy是动态语言!
  • 二. 简化
  • 三. 生态体系
  • 四. 本系列安排


简介

groovy1.0于2007年发布,目前版本为2.4;

在我看来,groovy ~= 语法糖Java;他们都需要依托于jvm运行;

groovy是动态语言,即在运行时动态决定变量或参数类型;

一. groovy是动态语言!

我们看一段常见的java代码:

class Part101 {
    public static void main(String[] args) {
        //初始化str为字符串
        String str = "hello world";
        //赋值10,类型为字符串
        str = String.valueOf(10);
        //赋值false,类型为字符串
        str = String.valueOf(false);

        System.out.println("str:"+str+" type:"+str.getClass().getTypeName());
    }
}
输出结果:str:false type:java.lang.String

上述代码中申明str时已经指定了类型为String,后续的赋值只能是String。

下面我们来看一下groovy代码:

class Part101 {
    static void main(String[] args) {
        def str = "hello world"
        str = 10
        str = false
        println "str:$str value:${str.class.typeName}"
    }
}
输出结果:str:false value:java.lang.Boolean

对比一下,忽略其他语法,我们可以看见,即使申明str时赋值的是字符串类型的值,但不代表str就是字符串类型,它是可以根据所赋值的类型动态的发生改变的。
这显然不是一个好的例子,因为在java中,我们也可以用Object达到相同的效果;

Object t = "hello world";
t = 10;
t = false;
System.out.println("t:"+t+" type:"+t.getClass().getTypeName());
输出结果:str:false value:java.lang.Boolean

二. 简化

在本篇开头,提到过groovy ~= 语法糖Java
我们再来对比下上述两段代码,有几点不同之处

  1. 在方法的申明时,省略了public
  2. 在输出是字符串拼接替换成了$类型的插值表达式
  3. system.out.println -> println,且省略了括号
  4. getClass -> class ,getTypeName -> typeName,省略了get
  5. 省略了全部的";"

综合看起来,会不会觉得groovy代码段更加的清晰?
groovy的语法糖不仅如此,在集合,I/O,函数式表达式等方面,更是优秀。我们会在后面的文章中对其一 一说明、比较。

三. 生态体系

众所周知,Java在web开发中应用相当广泛,得益于Spring生态。常用的体系框架如Springboot,mybatis等。

groovy体系没有Java的完善,但是也有比较出色的成熟框架,如grails,gormgrails集成了springboot的一些特色,很好的解决了配置的问题,并且,它的项目结构很清晰,约定大于配置!

gorm的语法结合了hibernate和mybatis-plus的特色,一般情况下,不写sql就能完成比较复杂的操作,并且在多租户问题方面,也是有成熟的解决方案。liuquibase的使用,使得我们在团队开发时可以清晰明了的监控表和数据等的一些操作。

四. 本系列安排

本系列将优先对groovy的语法简单的做些说明,其次我们将结合一个小项目对grails和gorm做陈述。在开发过程中,结合着一些近期学到的项目写法,补充的做些讨论,希望有兴趣的朋友们在过程中批评指正。