Groovy基础
字符串
groovy与Java字符串的区别是,groovy的字符串拥有运算能力,单引号和双引号都可以定义一个字符串常量。
单引号定义的是纯粹的字符串常量,不对字符串里的表达式做运算。
双引号定义的字符串有运算能力。
task printStr << {
def name = "zhang"
println '单引号字符串:${name}'
println "双引号字符串:${name}"
}
单引号字符串:${name}
双引号字符串:zhang
$符号后面紧跟一对花括号,括号内方表达式,如${1+3},当只有一个变量的时候可以省略花括号写成$name。
集合
List
创建
def numberArrayList = [1,2,3,4,5]
注意这里是定义了一个ArrayList。那要定义一个数组呢?
def numberArray = new int [4]
如果定义一个数组,而且要赋值呢对于java是这样String[] strs = new String[]{"a","b","c","d"};但对于groovy:
def numberArray = [1,2,3,4] as int[]
访问
groovy提供了更加方便的访问List的方式。groovy提供了下标索引的方式访问,还提供了负下标和范围索引。范围索引使用..分开
println numberList[1] //访问第二个元素
println numberList[-1] //访问最后一个元素
println numberList[-2] //访问倒数第二个元素
println numberList[1..4] //访问第二个到第五个元素
输出结果:
2
5
4
[2, 3, 4, 5]
遍历
groovy为list提供便利的迭代操作,each方法,接受一个闭包作为参数
numberArrayList.each {
println it
}
it变量就是正在迭代的元素。
Map
map的用法和List很像,值是K:V的键值对:
def map = [3:56, 'name':'Bruce']
输出的类型是:java.util.LinkedHashMap
map访问
map的多种访问方式.
map.get('name') //Result: "Bruce"
def a = 'name'
map.name //Result: "Bruce"
map['name'] //Result: "Bruce"
map[a] //Result: "Bruce"
map[3] //Result: 56
以下访问是错误的,会抛出异常
map[name]
map.3
map遍历
map的迭代也是用each,只是迭代的元素是Map.Entry:
map1.each {
println "key : $it.key, value: $it.value"
}
方法
groovy调用方法时可以省略括号,直接写成param1,param2,....的形式
task runMethod << {
method1(1,2)
method1 1,2
}
def method1(int a, int b){
println a+b
}
groovy中return可以不写,没有return的时候,会把执行的最后一句作为返回值。
def method1(int a, int b){
if(a > b){
a
}else {
b
}
}
闭包
闭包其实就是一段代码块,闭包可以作为参数传递。
task helloClosure << {
custom {
println it
}
}
def custom(closure){
for(int a in 1..5){
closure a
}
}
这里定义一个custom方法,他接受一个闭包作为参数,我们在helloClosure task内调用custom传入我们的闭包。当闭包只有一个参数时,默认就是It当然你也可以自己指定,->用于把闭包的参数和主体分开
custom { y ->
println y
}
多个参数时:
custom { x,y ->
println y+x
}