Groovy中需要明白的知识点
变量定义
通常有以下两种方式,一种是直接指定变量类型,另一种则不指定变量类型,直接使用def来定。
int intValue println intValue //结果:0 def str = 'hello' println str //结果:hello
动态类型绑定
def donamic = 1 println donamic.class //结果:class java.lang.Integer donamic = 'hello' println donamic.class //结果:class java.lang.String donamic = false println donamic.class //结果:class java.lang.Boolean
多重赋值(类似ES6的解构)
def list = [1,2,'c'] def a,b,c (a,c) = list println a //结果:1 println b //结果:2 println c //结果:c
for循环
//original for(x=0; x<2; x++){ println x //结果:0,1 } //range for(x in 1..3){ println x //结果:1,2,3 } //list for(x in [1,3]){ println x //结果:1,2,3 } //map def map = ['a':1,'b':2,'c':3] for(x in map){ println x.value //结果:1,2,3 } //string def hello = 'hello' for(x in hello){ println x //结果:h,e,l,o }
注意,在for语句中的变量不用定义,当然你定义也行。
列表
在Groovy中定义集合很简单,你只要通过如下方式定义即可
def numbers = [1,3] println numbers.size() //结果:3
你可以通过numbers[i]这种方式来访问列表中的每项,例如:
def numbers = [1,3] println numbers[0] //结果:1 println numbers[-1] //结果:3,-1表示从列表后面向前访问的第一项 numbers[3] = 4 //添加一项 println numbers //结果:[1,3,4] numbers << 5 println numbers //结果:[1,4,5]
通过上述的例子可以看出,你既可以通过numbers[i]这种方式来添加一个列表项,也可以通过 numbers<<5这种方式来添加列表项
映射
你可以通过以下方式来定义一个映射或者访问映射。
def colors = [red:'#ff0000',green:'#00ff00',blue:'#0000ff'] println colors.red //结果:#ff0000 println colors.'red' //结果:#ff0000 println colors."red" //结果:#ff0000 println colors['green'] //结果:#00ff00 println colors["green"] //结果:#00ff00 colors.yellow = '#ffff00' //增加键值对 println colors //结果:[red:#ff0000,green:#00ff00,blue:#0000ff,yellow:#ffff00]
通过上述的列子可以看出,既可以通过colors.red,colors[‘red’]这种方式来读取映射的值,也可以通过这种方式来增加键值对。
闭包
闭包其实就是一段可执行的代码集合,所以里面可以包括正常的赋值,循环等语句,定义一个简单的闭包如下:
def closure = {1} println closure() // 结果:1 println closure.call() //结果:1
从这里可以看出闭包的返回值为闭包中代码的最后一行的值,如果最后一行没有返回值,那么闭包的返回值为null。
当然你可以给闭包传递一个参数
def implicitParamClosure = {it-> println it } def explicitParamClosure = {para-> println para } implicitParamClosure('Hello') //结果:Hello explicitParamClosure.call('World') //结果:World
关于闭包,由于这个是Groovy的一个重要类型,并且在Gradle工具中大量使用,所以会在另外写一章进行详细说明。
类
class Song{ def name def artist String toString() { "name = ${getName()},artist = ${artist}" } } def song = new Song() song.name = 'Dangerous' song.setArtist 'Jackson' println song //结果:name = Dangerous,artist = Jackson
通过上面的代码示例,你可以看到类中的成员变量默认会生成setXXX()和getXXX()函数。
Groovy中默认有两种构造函数,一个是无参构造函数,另一个是map类型的构造函数。
def song = new Song([name:'Dangerous',artist:'Jackson']) //或者你可以写成 def song = new Song(name:'Dangerous',artist:'Jackson') println song //结果:name = Dangerous,artist = Jackson
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。