【Gradle系列】Groovy基础编程知识1

引言

上一节,咱们了解了“变量的定义” 本章咱们将学习系列的基础编程知识,如:字符串/数组/集合等java

String 3种经常使用的定义

(1)单引号定义字符串编程

def name = '单引号定义字符串'
复制代码

这种定义是没有格式的,须要换行等只能经过加号进行拼接json

(2)2个单引号定义数组

def nam2 = "2个单引号定义字符串"//普通定义
def helloExt = "hello : ${nam2}"//包含变量
def sum = "the sum is : ${3 + 2}"//包含表达式
复制代码

这种定义方式是可拓展,可包含变量/表达式等,相对是比较经常使用的一种markdown

(3)3个单引号定义闭包

def name1 = ''' 3个单引号定义字符串 第一行 第二行 第三行 { name:Davi age:boy } '''
复制代码

这种定义方式可读性比较强,能够指定格式,如:json等函数

String 体验相关API

先定义下:post

def str = "string1"
def str2 = "string2"
复制代码

字符串的扩充之,中心填充:学习

str.center(5, 'xx')
复制代码

左填充:this

str.padLeft(5, 'aa')
复制代码

索引:

println str[0]//访问单个元素
println str[0..1]//访问0-1的元素
复制代码

闭包

###闭包的定义和调用 闭包,就是可以读取其余函数内部变量的函数 先来看看不带参数的定义和调用:

def closure1 = {
   println 'hello closure!'
}
closure1.call()
复制代码

带参数的定义和调用:

def closure2 = {
  String name, int age -> println "hello ${name}"
}
closure2('closure???', 9)
复制代码

it 默认的参数的使用:

def closure3 = {
    println "hello ${it}"
}
closure3.call("it 默认的参数...")
复制代码

带返回值的定义和调用:

def closure4 = {
   return '闭包返回值'
}
println closure4.call()
复制代码

闭包结合基本数据类型等的使用

和int的结合使用,求n的阶乘,不须要for循环,简洁的代码:

int fab(int num) {
    int result = 1
    //1循环到num
    1.upto(num, { n -> result *= n })
    return result
}
复制代码

string类型结合闭包,遍历字符

void strFab() {
        def str = '2 and 3 is 5'
        str.each {
            String s -> println a
        }
 }
复制代码

闭包重要的3个变量

3个重要的变量:this,owner,delegate

this:表明闭包定义处的类

owner:闭包定义处的类/对象

delegate:任意对象,默认和'owner'一致

大部分状况下,三个关键字一致;

若是闭包中嵌套了闭包,那么'this'指向的是最外层的,'owner' 'delegate' 指向的是最近那一层的

void demo() {
        //3个重要的变量
        def closure = {
            //闭包定义处的类,好比:PluginImpl.groovy
            println "closure this :" + this

            //闭包定义处的类/对象
            println "closure owner :" + owner

            //任意对象,默认和'owner'一致
            println "closure delegate :" + delegate
			
            def inner = {
                println "inner this :" + this
                println "inner owner :" + owner
                println "inner delegate :" + delegate
            }
        }
        closure.call()
}
复制代码

结尾

哈哈,该篇就写到这里(一块儿体系化学习,一块儿成长)