bingmous

欢迎交流,不吝赐教~

导航

Groovy in Gradle

使用Gradle需要了解的Groovy语法:

基础

  • 语句末尾不需要写分号
  • 支持使用def定义动态数据类型变量
  • 没有基本类型,全部使用包装类型
  • 方法变化
    • 使用def定义方法,可以不指定返回类型、参数类型,直接返回最后一行
    • 方法调用可以不写(),不过建议加上
    • 不管有没有返回值,Groovy中返回的都是Object类型
  • 字符串:支持单引号、双引号、三引号,双引号的可以解析插值,三引号可以带格式输出
  • 不用写getter/setter,会自动创建,调用时a.xxxa.setXxx(xx)
  • Class类型可以省略.class
  • ==就是表示equalsx.is(x)判断是不是同一个引用
  • 支持**运算符,表示多少次方
  • switch变化:
def num = 5.21

switch (num) {
   case [5.21, 4, "list"]:
       return "ok"
       break
   default:
       break
}
  • Groovy 支持三种集合类型:

List --> 链表,对应 Java 中的 List 接口,一般用 ArrayList 作为真正的实现类
Map --> 哈希表,对应 Java 中的 LinkedHashMap
Range --> 范围,它其实是 List 的一种拓展

// --> list 
def data = [666,123,"AA"]
data[0] = "BB"
data[100] = 33
println("size --> " + data.size()) // 101个元素

----------------------我是分割线------------------------

// --> map
def key = "888"
def data = ["key1": "value", "key2": 111, (key): 888] // 使用 () key 使用动态值

data.key1
data.["key1"]
data.key2 = "new"

def name2 = "name"
def age2 = 578
data.put(name2, age2)

println("size --> " + data.size()) // 4
println("map --> " + data) // [key1:value, key2:new, 888:888, name:578]
println("key--> " + data.get(key)) // key--> 888

----------------------我是分割线------------------------

// --> range
def data = 1..10
data.getFrom()
data.to()

println("size --> " + data.size())
println("range --> " + data) // range --> 1..10

闭包

Groovy中的闭包是一个开放,匿名的代码块,可以接受参数,返回值并分配给变量

// 标准写法,method1 就是一个闭包 (>▽<)
def method1 = { name,age ->
    name + age
}

// 调用方式
method1.call(123,888)
method1(123,888)

// 默认有一个 it 表示单个参数
def method3 = { "Hello World!$it" }

// 强制不带参数
def method2 = {  ->
    name + age
}

// 作为方法参数使用
def to(x, y,Closure closure) {
    x + y + closure(111)
}

闭包委托

闭包代码需要转换为.class代码执行,因此需要传递的参数就会赋值给delegate属性:

class Person {
    String name
    int age
}    
 
def cc = {
	name = "hanmeimei"
	age = 26
} 

Person person = new Person()
cc.call(person)

其中,cc是闭包,cc.call(person)是调用闭包,换个写法:

cc.delegate = person
cc.call()

可以直接使用的对象

println(rootProject.projectDir.path/absolutePath)
println(rootProject.rootDir.path)
println(rootProject.buildDir.path)

def file = project.file(fileName) //在当前项目下生成文件

其他groovy api

https://groovy-lang.org/groovy-dev-kit.html

posted on 2024-04-23 10:00  Bingmous  阅读(5)  评论(0编辑  收藏  举报