Groovy基础

2018-03-30  本文已影响0人  ztzt123

字符串

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
}
上一篇下一篇

猜你喜欢

热点阅读