1、配置 Groovy 环境:html
在 cmd 中,运行 groovy -v,若是打印 groovy 版本信息,则说明配置正确。此外 groovy 自带了编辑器(方便运行一些 snippets,固然最后能够另存为 .groovy,而后能够经过 groovy xxx.groovy 运行),可经过命令启动。以下:设计模式

在 IntelliJ IDEA 中建立 groovy 工程:数组
IDEA 自带对 groovy 的支持,能够直接选择 Groovy 类型的工程,以下:闭包

新建工程后,在 src 目录下编辑 Groovy 脚本:编辑器

2、基础语法:函数
一、语言简介:spa
- 是一种基于 Java 虚拟机的动态语言
- 基础语法和 Java 相似
- 可以调用已存在的 Java 类库
- Groovy 能够做为脚本语言来运行,也能够被编译为 Java 的字节码
- 若是仅仅在 Gradle 中使用 Groovy,只须要了解一些基本的 Groovy 知识
- 在 Groovy 中能够混写 Java 代码和 Groovy 知识。而且,若是不了解 Groovy 语法,彻底能够只写 Java 代码
二、与 Java 的区别:设计
- 表达式后面的分号可省略(通常是省略)
- 缺省状况下,构造函数和方法都是 public 的(Java 默认是 package)
- 方法中的 return 语句可选,最后一个表达式的值做为返回值
- 编译器自动为属性添加 getter 和 setter 方法。而且能够直接使用属性名来访问属性,但底层仍是调用 getter 和 setter(固然 getter 和 setter 可显式声明,自定义)
- 当调用 == 来比较两个对象,底层会自动调用 equals 方法
- Groovy 非空为真,而 Java 未采用
三、断言:assert 可用做前置或后置条件的检查,当检查条件不符合时,程序终止运行,并提示错误。Groovy 的断言和 Java 相似,而且运行时不须要指定 -ea 参数。3d
四、变量类型:code
- Groovy 不强制要求申明变量类型,便可以使用 def 关键字定义变量(弱类型)。也能够做为强类型语言使用
- 注意:类比于 JavaScript 中的 var,但不一样的是 Groovy 不指定变量类型,在赋值以前,变量为 Object 类型。好像如今 Java10 也支持 var 了
- 未赋值以前,变量值为 null
- 当为变量赋值之时,变量的类型才肯定(使用 var,则为弱类型语言,类型可改变)
- 方法的参数、返回值类型同理
五、运算符:三目运算符 & Elvis 运算符:
//最开始
def name = 'a'
def test = name != null ? name : 'b'
//Groovy 支持非空为真
name = 'a'
test = name ? name : 'b'
//为了“不重复”,才有了 Elvis 运算符
name = 'a'
test = name ?: 'b'
六、参数列表括号:当函数有参数时,能够省略括号。如:func(val1, val2),等价于 func val1, val2。
七、字符串:
单引号字符串:和 Java 的 String 等效
双引号字符串:是一种新的字符串类型,称为 GString:能够在字符串中使用 $ 符号引用变量;可使用 ${} 计算表达式的值。这带来了不少便捷
三引号字符串:能够保持格式,好比跨多行
八、List 集合:
- 默认使用 Java 的 ArrayList
- 使用方括号 [] 表示 List,值用逗号分隔
- 使用 << 运算符向最后添加一个元素
- 却可使用数组化方式访问元素
- 使用 each 方法, lambda 做为参数,来遍历元素(好像不是 lambda,而是闭包)
- 其他方法和 Java 是相似的
九、Map 集合:
- 默认使用 Java 的 LinkedHashMap
- 使用方括号表示 Map,值用逗号分隔。与 List 的区别在于:值为键值对,如 ['name1': 'value1', 'name2': 'value2']
- 经过为 new Key 赋值,添加新的元素,如 map[newKey] = value
- 可使用点号访问键值对,如 map.key,可使用数组下标方式访问 key
- 使用 each 方法遍历元素,元素为键和值
例程(我的以为,由于 Groovy 是脚本语言吧,因此能够不在类中,而是直接运行一些 "语法糖" ):

十、接下来就是比较帅气、也相对重要的部分了——闭包 Closure:
- Groovy 中的闭包是一块代码(相似于 lambda 表达式。我的感受就是把 lambda 包起来了)
- 能够赋值给变量、做为参数传递、像普通的方法被调用
- 闭包的类型是 groovy.lang.Closure
- 无参的闭包默认包含一个叫 it 的参数(隐式参数):闭包自己没有参数,可是调用时,it 表明传进来的第一个参数;若是调用时没有提供参数,那么 it 的值为 null
- 闭包总有一个返回值:若是没有显示使用 return 语句,并且最后一个表达式没有值,那么返回 null
例如:
def closure = { key, value ->
println value
}
委托:简言之,就是被委托者,可使用管理委托者吧。不过暂时用不着,之后再更新。

好嘛,我就是还没搞懂。在老师的例程中,彻底没看出委托的做用,不过师傅领进门足矣。因为见识浅薄,对委托也没法熟练应用,等须要了、学会了,再记录。可能学过设计模式就能懂了吧(剑23,嘿嘿)。