Groovy基础

294 阅读2分钟

Groovy是基于JVM虚拟机的一种动态语言,语法和java差不多。Groovy完全兼容java,又在java基础上增加了很多动态类型和灵活的特性,如支持闭包,支持DSL,是一种灵活的脚本语言

字符串

""和'' 都表示字符串

def str1 = "双引号表示字符串"
def str2 = '单引号也能表示字符串'

集合

1.List

  1. 创建
def arr = [1,2,3,4,5]

2.访问

def arr = [1,2,3,4,5]
println arr[0]  //get第一个
println arr[-1] //get倒数第一个
println arr[-2] //get倒数第二个

3.迭代遍历

def arr = [1,2,3,4,5]
arr.each{
    println it
}

2.Map

1.创建

def map = ['name':'czk','age':18]

2.访问 map[key]或者map.key

def map = ['name':'czk','age':18]
map['name']
map.name

3.迭代遍历

//it代表Map.Entry
map.each{
    println "key---->${it.key} --- value---->${it.value}"
}

方法

1.方法的括号可以省略

def methodMain(){
    methodA(18,180)
    methodA 18,180
}

def methodA(int age,int weight){
    println age+weight
}

2.retrun可以省略,省略时最后一行代码作为其返回值

def String getYourName(){
    return "小明"
}
def String getYourName(int sex){
    if(sex == 1){
        "小明"
    }else {
        "小芳"
    }
}
task testGroovy{
    println getYourName()
    println getYourName(0)
}

3.代码块可以作为参数传递

//代码块:{}花括号包裹的代码

def list = [1,2,3,4,5]

list.each({println it})

list.each{
    println it
}

//和java差不多,但是可以省去getter/setter
class Student {
    String name
    int age

    public Student(String name, int age) {
        this.name = name
        this.age = age
    }
}
task testGroovy{
    println getYourName()
    println getYourName(0)
    Student student = new Student("czk",18)
    println "我是${student.name}今年${student.age}岁"
}

闭包

1.闭包-单个参数

闭包是Groovy的一种特性,其实就是一段代码块,单个参数由it表示

task cusotmClosure{
    //it 
    customEach{
        println it
    }
}

def customEach(closure){
    for(int i in 1..10){
        closure(i)
    }
}

2.闭包-多个参数

多个参数就不能用一个it表示le,有几个参数就得声明几个,a,b,c ->

task cusotmClosure2 {
    customEachMap { k, v ->
        println "${k} is ${v}"
    }
}
def customEachMap(closure){
    def map = ["age1":18,"age2":22]
    map.each{
        closure(it.key,it.value)
    }
}