快速入门安卓Gradle指南(1/10)Groovy基础语法

牛客高级系列专栏:

安卓(安卓系统开发也要掌握)


嵌入式


本人是2020年毕业于广东工业大学研究生:许乔丹,有国内大厂CVTE和世界500强企业安卓开发经验,该专栏整理本人对安卓Gradle的理解。网上安卓资料千千万,笔者将继续维护专栏,承诺提供专栏内容免费技术答疑,直接咨询即可,助您提高安卓学习效率!

目录开始⬇

  • 1、Groovy
  • 2、Groovy的运行方式
  • 3、Groovy常见语法
    • 数据类型
      • 基础类型
      • 字符串
    • 通用语法
    • 定义变量
    • 定义方法
    • 断言
    • 循环
    • switch
    • List
    • Map
    • 闭包
    • import
    • IO操作
  • 4、 DSL

1、Groovy

Groovy 是一种基于 JVM 的动态编程语言,支持原生的 Java 语法和标准库,并吸收Python、Ruby等语言的优秀特性,添加了许多扩展,包括闭包、动态类型、运算符重载、字符串模版、DSL、元编程、支持 JSON 和 XML 等序列化和反序列化,以及内置支持数据库访问、Web 编程和测试编写等功能。如果你忘记了Groovy语法,可以继续按Java语法写。

Groovy 被广泛应用于构建 Java 平台上的服务器端应用、Web 应用程序、安卓应用程序、测试自动化等场景。

2、Groovy的运行方式

我们看看安卓APP工程里面根build.gradle文件有如下代码:

task clean(type: Delete) {
    delete rootProject.buildDir
}

这段 Groovy 代码定义了一个名为 "clean" 的 Gradle 任务,使用了 Gradle 的 "Delete" 类型,用于清空项目的 build 目录。这意味着在执行此任务时,会删除 rootProject.buildDir 目录及其所有子目录和文件。要执行此任务,只要执行如下命令:

gradle clean

这个例子相信对于入门过安卓APP开发的同学来说,一定不陌生,所以Groovy的运行方式就是:

  • 新建一个build.gradle文件(对应案例中的根build.gradle文件);
  • 添加一个task,并编写需要执行的任务(对应案例中的clean任务);
  • 运行命令:gradle + 任务名称对代码进行运行调试;(对应案例中的'gradle clean'命令)

3、Groovy常见语法

仅凭一篇文章是介绍不完Groovy语法的,在此,我们快速入门最常见的Groovy语法。先推荐几个学习Groovy语法的网站:

还有两个比较好用的在线运行Groovy的网站:

数据类型

基础类型

Groovy支持的基本数据类型,包括:byte、short、int、long、float、double、boolean、char,除了以上基本数据类型,Groovy 还提供了 BigInteger、BigDecimal、Object 和 void 类型:

  • BigInteger: 不受固定范围限制的大整型数据类型
  • BigDecimal: 不受固定范围限制的大实数数据类型
  • Object: 所有类和接口的超类,表示任意类型的值
  • void: 返回值为空的特殊类型,表示对方法的调用不需要返回任何结果

字符串

Groovy的字符串有单引号、双引号、三引号字符串;

// 单引号字符串
def name = 'Xurui'
println 'Hello, ' + name + ' !' //打印 Hello, xurui !

// 双引号字符串,双引号字符串可以在运行时进行字符串插值
println "Hello, ${name} !" // 也是打印  Hello, xurui !

// 三引号字符串,保留文本的换行和缩进格式,但不支持插值
def text = """Hello,
    world!
Hello Xurui!"""
println text

最后打印的内容是(不仅保留了换行,第二行前面的缩进也保留了):
Hello,
    world!
Hello Xurui!

通用语法

  • 语句后面的分号可以省略,可加可不加;
  • 注释:单行注释使用//,多行注释使用/**/
  • 方法后面的括号可以省略,如下面三行有注释的代码的括号都是可以省略的:
int addNumber(a, b) {
    println (a + b) //括号可以省略
    return (a + b)  //括号可以省略
}

def sum = addNumber (1, 4) //括号可以省略,没错,调用方法也可以省略括号
  • as/asType asTyep可以用于数据类型的转换
String a = '100'
int num = a as int// 把字符类型的a转换为int类型,赋值给b
def num2 = a.asType(Integer) //同理
  • 判断是否为真 以下两行代码等价,是不是觉得比java简洁多了
if (str != null && str.length > 0) 
if (str)
  • ?.符号 Groovy 的 ?. 操作符被称为可空属性安全导航运算符,以下代码是等价的:
def user = getUser() // 可能返回 null
if (user != null) {
    println user.name // 进行非空判断
    ...
}

//等价于
def user = getUser() 
println user?.name //所以此时如果user是空的,则不会有打印,也不会报错

如果懂Kotlin语法的同学,看到?.符号很容易想到!!. 符号,不过Groovy语法中并不支持!!.哦。

  • ?: 操作符:Elvis 运算符 Groovy 中的 ?: 操作符又称为 Elvis 运算符。它的作用是判断左侧操作数是否为 null,如果不为 null,则返回左侧操作数的值,否则返回右侧操作数的值。?: 操作符可以用于设置默认值或者替换 null 值,例如:
def userName = user?.name ?: "Xurui" //如果user?.name是空的,则赋值"Xurui"
  • with/apply with/apply 语法是一种方便的语法结构,可以用来简化代码并提高代码的可读性。它可以使得在多个参数的情况下,能够更清晰地传递参数,并避免多次调用同一个对象。语法如下:
class Student {
    String name
    int age
}

def stu = new Student(name : "xurui", age : 28)
println stu.name
println stu.age
stu.age += 1

//使用with可以写为:
def rlt = stu.with {
println name
println age
age += 1  //with 返回最后一个执行语句的结果
}

println rlt //打印出29.因为with 返回最后一个执行语句的结果,此时rlt是上面‘age += 1’的数值,即29

//使用apply可以写为( apply 更适用于需要在闭包中对对象的多个属性进行修改的场景):
stu.apply {
name = "LeeYu"
age += 1
}

// apply 返回该对象本身,所以可以这么写
def anotherStudent = new Student().apply {
    name = "LeeYu"
}.apply {  //这里返回一个Student类,里面只配置了name = "LeeYu",所以可以接着配置
    age = 27
}
  • 推荐使用def定义变量或者方法,而不是具体的类型

定义变量

可以使用def来定义变量,默认访问修饰符为public,可以不指定变量的类型,如下面两行代码是等价的:

def a = 1; //Groovy 会自动根据变量的值推断类型
def int a = 1;

定义方法

可以使用def来定义方法,默认访问修饰符为public,常见的语法有:

// 标准函数定义
def add(int a, int b) {
    return a + b;
}

// 参数类型可以省略
def add(a, b) {
    return a + b;
}

//可以不指定变量的类型,指定类型时可以省略def关键字;
int add(int a, int b) {
    return a + b;
}

//可以不使用return,自动将最后一行代码的执行结果当作返回值:
int add(int a, int b) {
    a + b;
}

//使用闭包:闭包可以看作是一种无名函数,可以在程序执行时动态定义、构建、返回和存储,下文会单独介绍闭包
def isLessThan10 = {
    int i -> i < 10 == 1 //比较传入的整数参数是否小于 10,如果是则返回 1,否则返回 0
}

Groovy的类默认访问修饰符为public,且定义的类所在的文件的名字不需要和类的名字保持一致(Java就要求保持一致),不过还是建议采用相同名字。

//定义
class Student {
    String name
    int age = 10
    def getName() {
        this.name
    }
    
    def addAge(int age) {
        this.age += age
    }
}

//使用
def stu = new Student()
stu.addAge 5
println stu.age  //会打印 15

断言

Groovy的断言一直处于开启状态,是进行单元测试的首选方式,比如执行:

assert 1 + 1 == 3

则程序运行到这里时就会抛出异常,停止运行。

循环

Groovy的循环有:

  • for-in 循环
  • for-each 循环
  • for-loop 循环
  • while循环
  • do-while循环

举几个常见的使用案例:

for (i in 0..9) {
    println i
}

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

def map = [name:'Bob', age:35, gender:'Male']
map.each{ key, value ->
    println "$key: $value"
}
for (v in map.values()) {
    println v
}

def arr = [1, 2, 3, 4, 5]
for (i in arr) {
    println i
}
for (int i : arr) {
    println i
}

def numbers = [1, 2, 3, 4, 5]
numbers.ea

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

快速入门安卓Gradle指南 文章被收录于专栏

如果你想学习Android App开发,那么学习Gradle一定是必要的。 Gradle是一种构建工具,用于编译和构建Android应用程序,它可以自动处理依赖关系,生成APK文件等。通过本指南,你将掌握Gradle的基本概念和使用技巧,以及如何在工程中配置Gradle。通过学习Gradle,你可以更高效地构建和管理你的Android应用程序,提高你的开发效率,从而更好地满足用户需求。

全部评论

相关推荐

1 1 评论
分享
牛客网
牛客企业服务