欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Groovy基本语法看懂gradle

程序员文章站 2022-07-12 15:11:21
...
package danxx.demo

import groovy.json.JsonOutput
import groovy.json.JsonSlurper

//https://blog.csdn.net/zhaoyanjun6/article/details/70313790
//
//
println("hello world")

/**对应java中的int**/
def a = 123
/**java中的String**/
def  aStr = "Hello World!"
/**double类型**/
def  d = 1.2

println( aStr )
println aStr


/**无参函数**/
def fun1(){

}

/**有参函数**/
def  fun2(arg1, agr2){

}

String fun3(){
    return "返回值"
}

println(fun3())

def getSomething(){
    "getSomething return value" //如果这是最后一行代码,则返回类型为String
    1000  //如果这是最后一行代码,则返回类型为Integer
}

/**灵活强大的for循环*/
for (i = 0; i < 5 ; i++) {
    println("测试 "+i)
}

for (i in 0..5){
    println("hello world for "+i)
}

for (i in 0..<5){
    println("hello for "+i)
}

4.times {
    println it
}

def temp = 10
/**三目运算符**/
def temp_1 = temp > 20 ? temp : 15

println(temp_1)

/**很类似java中的try catch**/
try{
    println 5 / 0
}catch(Exception e){
    e.printStackTrace()
}

def age = 28

def rate

/**比java的switch更强大**/
switch (age){
    case 10..26:
        rate = 0.02
        break
    case 27..35:
        rate = 0.09
        break
    case 36..48:
        rate = 0.12
        break
    case 49..100:
        rate = 0.22
        break
    default:
        throw new IllegalArgumentException()
}

println("rate : "+rate)


/**asType 类型转换**/
def s1 = "123"
//String 转成 int
s2 = s1 as int
//String 转成 int
s3 = s1.asType(Integer)

/**groovy强大的的List集合容器**/
def tempStr = "dddd"
def aList = [12,"好的","这是很强大的$tempStr","list",2.22]
println(aList)
println(aList[2])
/**groovy强大的的Map集合容器**/
def map = [key1: "value1", key2: "value2", key3: "value3"]
//打印所有的key
println(map.keySet())
//打印所有的value
println(map.values())
println("key1的值 : " + map.get("key1"))
println("key2的值 : " + map.get("key2"))

//判断map是否包含某个key
map.containsKey("key1")
//判断map是否包含某个values
map.containsValue("values1")
//清除map里面的内容
map.clear()
//把 map 的key值转换为 set
Set set = map.keySet()

/**Range 是 Groovy 对 List 的一种拓展*/
def range = 1..5
println(range)
//[1, 2, 3, 4, 5]
range.size()  //长度
range.iterator() //迭代器
def s11 = range.get(1) //获取标号为1的元素
range.contains( 5) //是否包含元素5
range.last() //最后一个元素
println("第一个数据: "+range.from) //第一个数据
//第一个数据: 1
println("最后一个数据: "+range.to)   //最后一个数据
//最后一个数据: 5


/**闭包,英文叫Closure,是Groovy中非常重要的一个数据类型或者说一种概念了。闭包,是一种数据类型,它代表了一段可执行的代码。*/
def aClosure = {//闭包是一段代码,所以需要用花括号括起来..
    String param1, int param2 ->  //这个箭头很关键。箭头前面是参数定义,箭头后面是代码
    println"this is code" //这是代码,最后一句是返回值,
    println(param1)
    println(param2)
    //也可以使用return,和Groovy中普通函数一样
}

/**闭包格式*/
//def xxx = {paramters -> code}
//或者
//def xxx = {无参数,纯code}

//调用闭包
aClosure.call("非常nice的闭包", 123)
aClosure("非常nice的闭包调用方式2", 233)


/**闭包作为函数的参数*/
def fun4(int agrs1, String args2, Closure closure){
    println(agrs1)
    println(args2)
    //调用闭包
    closure()
}

/**Groovy中,当函数的最后一个参数是闭包的话,可以省略圆括号*/
fun4(12, "调用带闭包参数的函数", {
    println(fun3())
})

/**下面是android gradle中类似的用法*/
/*providedCompile("com.danxx.lib_common:[email protected]"){
    changing = true
    transitive=false
    exclude(module: 'module-1')
}*/

/***类转json字符串**/
Person person = new Person();
person.age = 22
person.name = "你的名字"

def jsonStr = JsonOutput.toJson(person)
println(" jsonStr : "+jsonStr)

JsonSlurper jsonSlurper = new JsonSlurper();
Person parseClass = jsonSlurper.parseText(jsonStr)

println("person name : "+parseClass.name)

/**io操作比java简单很多**/
def filePath = "/Users/dawish/log.txt"
def file = new File(filePath)
//输出文本
println file.text

//写文本
file.withPrintWriter {
    it.println("111 withPrintWriter withPrintWriter withPrintWriter")
    it.println("222 withPrintWriter withPrintWriter withPrintWriter")
}

/**断言 不满足条件时会停止向下执行**/
assert  aStr.size() > 30