Android Gradle开发与应用 (二) : Groovy基础语法

1. Groovy是什么

Groovy是基于JVM虚拟机的一种动态语言,语法和Java非常相似,并能够无缝地与Java代码集成和互操作,增加了很多动态类型和灵活的特性。(闭包、DSL)

语法和Java非常相似这个特点,意味着,如果我们完全不懂Groovy的语法,也可以按Java的语法来写Groovy代码。 这对于Java工程师来说是非常友好的。

不过,如果我们懂得一些Groovy的语法,那么对于Groovy的开发,会更加的方便和得心应手。以下是一些Groovy区别于Java的一些特性。
在这里插入图片描述

2. def类型推断

在 Groovy 编程语言中,def 关键字是一个非常灵活的声明符,它用于定义变量、方法或属性,并且允许类型推断。使用 def 时,编译器会根据所赋值的对象自动确定变量的类型,因此开发者不需要显式地指定变量的类型。

Groovy是一种动态类型语言,这就意味着它既可以表现出强类型语言的特点,也可以表现出弱类型语言的特点。
在Groovy中,你可以选择明确声明变量的类型,这就像强类型语言那样,编译器会在编译时检查类型错误。这种方式有助于提早发现和避免一些可能的错误。
另一方面,你也可以选择不声明变量的类型,让Groovy在运行时决定变量的类型,这就像弱类型语言那样。这种方式使得代码更加简洁,但也可能增加运行时出错的风险。
因此,Groovy既可以被视为强类型语言,也可以被视为弱类型语言,这取决于你如何使用它。

2.1 变量定义

当你使用 def 声明一个变量时,Groovy 不需要知道变量的具体类型,它可以在运行时动态地决定变量的类型。

def a = 10 // a 将被推断为整数类型 Integer
def b = "Hello" // b 将被推断为字符串类型 String

2.2 可变类型

使用 def 定义的变量可以改变其引用的对象类型,这是因为在 Groovy 中,变量本身没有固定的类型,而是指向了一个对象。

def c = true // c 被推断为布尔类型 Boolean
c = "World" // 现在 c 变成了字符串类型

2.3 方法定义

在 Groovy 中,def 还可以用来定义方法(函数),此时方法返回的类型也是可以由编译器推断得出或者不返回任何值(void)。

def add(a, b) {
    return a + b
}

2.4 属性定义

在类中定义属性时,也可以使用 def,这将创建一个具有隐式 getter 和 setter 的属性,其类型同样是动态推断的。

总之,def 关键字是 Groovy 动态特性的体现,它增强了代码的简洁性和灵活性,特别是在快速开发和脚本编写场景中表现尤为突出。不过,在大型项目或需要严格类型检查的情况下,可能需要更多地考虑是否使用明确类型的变量声明来增强代码的可读性和维护性。

3. 字符串

Groovy中的字符串和java中非常相似,还可以使用单引号''

task stringTest {
    String str1 = "hello"
    var str2 = "wrold"
    def str3 = "!"
    //print(str1 + str2 + str3)
    println("${str1} ${str2} " + str3)
}

4. 列表

列表可以直接用[]进行定义,遍历起来也非常方便

task listTest {
    def list = [5, 6, 7, 8, 9]
    println list[0]

    //遍历方式一
    for (int data in list) {
        println(data)
    }
    //遍历方式二
    for(int i in 0..4){
        println(list[i])
    }
}

5. Map

Map也是一样的,使用[key:value]的形式定义,遍历也非常方便

task mapTest() {
    def map = ["name": 'heiko', "age": 18]
    println map["name"]
    map.each {
        println it
        println it.key + ":" + it.value
    }
}

task method {
    def a = methodA(3, 5)
    println(a)
}

6. 方法

groovy语法当中默认将函数非空(有代码的)最后一行作为结果进行返回

def methodA(int a, int b) {
    //groovy语法当中默认将函数非空(有代码的)最后一行作为结果进行返回
    a + b
}

7. 类

类的使用和Java中几乎一样

class Student {
    private String name
    private int age

    private String getName() {
        return name
    }

    private int getAge() {
        return age
    }

    private void setName(String name) {
        this.name = name
    }

    private void setAge(int age) {
        this.age = age
    }


    @Override
    String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

task classTest() {
    Student student = new Student()
    student.name = "heiko"
    student.age = 20
    println(student)
    student.setName("XXX")
    student.setAge(21)
    println(student)
}

8. 闭包

本质是一个开放的、匿名的代码块,它可以接受参数、也可以有返回值。
可以认为闭包是一个匿名的接口或类。

8.1 语法

闭包的参数可以是0个、1个或多个

{ [params ->] 
	//具体代码
}

Groovy大括号{}是闭包,小括号()是可以省略的,默认是带有小括号的,但是Groovy因为是糖果语法可以省略小括号
闭包{} 只针对{} 区域内有效。

8.2 一个最简单的闭包

def myClosure = {
    println("running start...")

    println("running end...")
}

//调用闭包方式一
myClosure() 
//调用闭包方式二
myClosure.call()

9. 示例 : 使用groovy语法读取一个文件 : .properties文件

def getUrlPath(String buildType) {
    def url

    Properties properties = new Properties()
    def proFile = file("src/main/filters/" + buildType + "/config.properties")
    if (proFile.canRead()) {
        properties.load(new FileInputStream(proFile))
        if (properties != null) {
            url = properties["SERVER2"]
        }
    }

    url
}

9. Gradle相关的其他文章

Android Gradle开发与应用 (一) : Gradle基础
Android Gradle开发与应用 (二) : Groovy基础语法
Android Gradle插件开发_实现自动复制文件插件

  • 21
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

氦客

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值