参考资料
一些特性
- 无类型 用def定义变量和函数
- 函数支持默认参数
- Groovy中不支持将函数名作为参数传递,但是支持闭包的延迟执行,所以本质上也是可以实现函数的延迟调用的
- 函数传参,加不加括号一个样,比如 println(‘123’) 和 println ‘123’ 是一样的
- 返回值是函数的最后一行,可以不写返回值,写了也就写了,很灵活
def test(){ '123' } println(test())
- 可以使用 ?. 的方式排除空指针异常
range范围
在Groovy中表示一个范围用下面的方法
0..5 0 1 2 3 4 5
0..<5 0 1 2 3 4
字符串插值
“abc${value}!!!”
注意要用双引号
集合
定义集合
def list = [1, 2, 3]
println(list)
添加项
def list = [1, 2, 3]
list.add(4)
list[6] = 8 // 如果这里空开了,中间的项填null
list << 9
println(list)
输出
[1, 2, 3, 4, null, null, 8, 9]
map
在集合的每个项调用其方法然后输出,要使用星号 *
def list = ['java', 'abc']
println(list*.toUpperCase())
输出
[JAVA, ABC]
判断集合里面有几个特定值
需要使用 count(特定值)
def list = ['java', 'abc']
println(list.count('abc'))
结果
1
注意如果不传参数,则报错,这里要注意
给每个项目中间加上逗号隔开 join
def list = ['java', 'abc']
println(list.join(','))
结果
java,abc
字典
定义
def hash = [name:"Andy", "VPN-#":45]
println(hash)
注意:
- key可以不是字符串类型的,底层会自己转
取值,赋值
- 取值 get / 直接点
- 赋值 put
def hash = [name:"Andy", "VPN-#":45]
hash.put('nick_name', 'shading')
println(hash)
println(hash.get('name'))
结果
[name:Andy, VPN-#:45, nick_name:shading]
Andy
我推荐直接点出的方式来添加值,不要太爽
def hash = [name:"Andy", "VPN-#":45]
hash.nick_name = 'shading'
prinfln(hash.nick_name)
流程控制
if
if ( ... ) {
...
} else if (...) {
...
} else {
...
}
for
- 可以用经典for循环
- 可以使用 for in
- 可以对可迭代对象进行each迭代
def hash = [name:"Andy", "VPN-#":45]
hash.nick_name = 'shading'
hash.each {
println(it)
}
结果:
name=Andy
VPN-#=45
nick_name=shading
it关键字可以改,使用类lamda语法
hash.each { value ->
println(value)
}
// 或者这样
hash.each { key, value ->
println(value)
}
函数做参数
虽然不支持函数做参数,但是支持闭包做参数,所以可以用下面的方式实现:
def func = {value ->
println("${value}!!")
}
func('123')
注意这里必须是双引号
类
定义
class Person {
def name
def age
}
自动生成构造函数
class Person {
def name
def age
}
def p1 = new Person(name: 'liming', age: 17)
注意其中的参数标记是必须填写的,不然报错
自动生成get set
println(p1.name)
println(p1.getName())