Gradle入门之Groovy语法

本文详细介绍了Groovy编程语言的核心语法,包括变量、运算符、字符串、数据结构、面向对象特性、闭包以及JSON操作。Groovy作为Android开发中的重要工具,它的语法与Java和Kotlin相似,学习成本低,支持DSL和简洁的语法,使得代码更易读和维护。文中通过实例展示了Groovy如何在实际场景中应用,适合熟悉Java和Kotlin的开发者快速上手。
摘要由CSDN通过智能技术生成

前言

gradle是一个基于JVM的构建工具,它结合了Python、Ruby和Smalltalk的许多强大的特性,Groovy 代码能够与Java代码很好地结合,也能用于扩展现有代码。由于其运行在 JVM 上的特性,Groovy可以使用其他Java语言编写的库。目前已经应用在多数Android技术体系中,比如,jenkins,插件化,组件化,模块化等等。如果你不了解gradle,那么前面几个技术点很难深入理解。

Groovy 的语法跟 kotlin 类似,如果我们有 kotlin 的经验的话那么学习 groovy 会容易很多。下面我们一起来学习下groovy的核心语法,大家可以跟着样例敲一下加深理解、记忆。

基本特点

  • 构建在强大的Java语言之上 并 添加了从Python,Ruby和Smalltalk等语言中学到的 诸多特征,例如动态类型转换、闭包和元编程(metaprogramming)支持。
  • 为Java开发者提供了 现代最流行的编程语言特性,而且学习成本很低(几乎为零)。
  • 支持DSL(Domain Specific Languages领域定义语言)和其它简洁的语法,让代码变得易于阅读和维护。
  • 受检查类型异常(Checked Exception)也可以不用捕获。
  • Groovy拥有处理原生类型,面向对象以及一个Ant DSL,使得创建Shell Scripts变得非常简单。
  • 在开发Web,GUI,数据库或控制台程序时 通过 减少框架性代码 大大提高了开发者的效率。
  • 支持单元测试和模拟(对象),可以 简化测试。
  • 无缝集成 所有已经存在的 Java对象和类库。
  • 直接编译成Java字节码,这样可以在任何使用Java的地方 使用Groovy。
  • 支持函数式编程,不需要main函数。
  • 一些新的运算符。
  • 默认导入常用的包。
  • 断言不支持jvm的-ea参数进行开关。
  • 支持对对象进行布尔求值。
  • 类不支持default作用域,且默认作用域为public。
  • groovy中基本类型也是对象,可以直接调用对象的方法。

基础语法

Groovy中的变量

groovy中变量既可以像java一样是强类型的,也可以像kotlin一样是弱类型的。
代码示例如下:

class Study {
    static void main(String[] args) {
        String a = 'Hello World'
        def b = "Hello Silence"
        println(a)
        println(b)
    }
}

输出结果如下:

Hello World
Hello Silence
Groovy中的运算符和条件控制

与java一致,这里不过多介绍

Groovy中的字符串

Groovy提供了多种表示String字面量的方法。Groovy中的字符串可以用单引号(’),双引号(“)或三引号(“““)括起来。此外,由三重引号括起来的Groovy字符串可以跨越多行。

示例代码如下:

class Study {
    static void main(String[] args) {
        String a = 'Hello World'
        def b = "Hello Silence"
        def c = '''Hello World
Hello Silence'''
        println(a)
        println(b)
        println(c)
    }
}

运行结果如下:

Hello World
Hello Silence
Hello World
Hello Silence
字符串的扩展

Groovy的扩展和kotlin的一样,示例代码如下:

class Study {
    static void main(String[] args) {
        String a = 'Hello World'
        def b = "Hello $a"
        println(a)
        println(b)
    }
}

输出结果如下:

Hello World
Hello Hello World
字符串的索引

Groovy中的字符串是字符的有序序列。字符串中的单个字符可以通过其位置访问。这由索引位置给出。

字符串索引从零开始,以小于字符串长度的一个结束。Groovy还允许负索引从字符串的末尾开始计数。

具体示例代码如下:

class Study {
    static void main(String[] args) {
        String a = 'Hello World'
        println(a[1])//输出坐标为1的内容
        println(a[-2])//输出坐标为倒数第二的内容
        println(a[1..2])//输出坐标区间为1-2的内容
        println(a[2..5])//输出坐标区间为2-5的内容
    }
}

输出结果如下:

e
l
el
llo 

数据结构

Range范围

范围是指定值序列的速记。范围由序列中的第一个和最后一个值表示,Range可以是包含或排除。包含范围包括从第一个到最后一个的所有值,而独占范围包括除最后一个之外的所有值。

  • 1…10 — 包含范围的示例
  • 1 … <10 - 独占范围的示例
  • ‘a’…‘x’ - 范围也可以由字符组成
  • 10…1 - 范围也可以按降序排列
  • ‘x’…‘a’ - 范围也可以由字符组成并按降序排列。
方法描述
contains()检查范围是否包含特定值
get()返回此范围中指定位置处的元素。
getFrom()获得此范围的下限值。
getTo()获得此范围的上限值。
isReverse()这是一个反向的范围,反向迭代
size()获得范围的元素值。
subList()返回此指定的fromIndex(包括)和toIndex(排除)之间的此范围部分的视图。
List

列表是用于存储数据项集合的结构。在 Groovy中,List保存了一系列对象引用。

List中的对象引用占据序列中的位置,并通过整数索引来区分。

groovy 中的一个列表中的数据可以是任意类型。这和java下集合列表有些不同,java下的列表是同种类型的数据集合。

groovy中列表还可以嵌套列表。如[1,2,[3,4,5],“aaa”]groovy列表内置有反转方法 reverse()。调用 List.reverse() 可以实现列表反转。groovy列表内置有排序方法 sort()。调用 List.sort() 可以实现列表排序。空列表表示为[]声明一个空集合。

Map

Map是对象引用的无序集合。Map集合中的元素由键值访问。Map中使用的键可以是任何类。当我们插入到Map集合中时,需要两个值:键和值。

面向对象

三大特性

Groovy中的面向对象和其他任何的面向对象语言一样,存在类和对象的概念。不过在groovy新增了一个trait的关键字,名为特征。

Groovy中的特征

特征是语言结构的构造,其他包括:

  • 行为的组成
  • 接口运行时的实现
  • 与静态类型检查/编译的兼容性

使用trait关键字定义特征。示例代码如下:

class Study {
    static void main(String[] args) {
        Student st = new Student();
        st.StudentID = 1
        st.Marks1 = 10
        st.DisplayMarks()
    }
}

trait Marks {
    void DisplayMarks() {
        println("Display Marks")
    }
}

class Student implements Marks {
    int StudentID
    int Marks1
}

输出结果如下:

Display Marks

上述示例中trait是类似接口的存在,同理,trait也可以实现接口。
示例代码如下:

class Study {
    static void main(String[] args) {
        Student st = new Student();
        st.StudentID = 1
        st.Marks1 = 10
        st.DisplayMarks()
        st.DisplayTotal()
    }
}

interface Total {
    void DisplayTotal()
}

trait Marks implements Total {
    void DisplayMarks() {
        println("Display Marks")
    }

    void DisplayTotal() {
        println("Display Total")
    }
}

class Student implements Marks {
    int StudentID
    int Marks1
}

输出结果如下:

Display Marks
Display Total
扩展特征

特征的扩展则使用extends关键字,示例代码如下:

trait Marks {
   void DisplayMarks() {
      println("Marks1");
   } 
} 

trait Total extends Marks {
   void DisplayMarks() {
      println("Total");
   } 
}  

Groovy中的闭包

闭包是一个短的匿名代码块,个人理解是和lamda是差不多的。
下面是一个简单的闭包例子,代码如下:

class Study {
    static void main(String[] args) {
        def test = { println "Hello World" }
        test.call()
    }
}

输出结果如下:

Hello World
闭包中的形式参数

闭包也可以包含形式参数,以使它们更有用,就像Groovy中的方法一样。

class Study {
    static void main(String[] args) {
        def hello="Hello"
        def test = {params -> println "$hello World" }
        test.call()
    }
}

输出结果也是Hello World。
当然我们还有另外一种写法:

class Study {
    static void main(String[] args) {
        def test = { println "Hello ${it}" }
        test.call("World")
    }
}

我们还可以把上面两种的形式,进行组合,示例代码如下:

class Study {
    static void main(String[] args) {
        def hello="Hello"
        def test = { params ->println "$hello ${params}" }
        test.call("World")
    }
}
在方法中使用闭包

类似kotlin的方法中可以传匿名函数一样。示例代码如下:

class Study {
    static void main(String[] args) {
        def hello="Hello"
        def test = { params ->println "$hello ${params}" }
        Study.Display(test)
    }

    def static Display(clo) {
        clo.call("Silence")
    }
}

输出结果如下:

Hello Silence

Groovy中的Json

我们先来看看 groovy 中对象与 json 字符串之间的相互转换:

import groovy.json.JsonOutput

class Study{
    public static void main(String[] args) {
        def study = [new Person("silence", 25),
                     new Person("david", 26)]
        def json=JsonOutput.toJson(study)
        println json
        //带格式的输出json
        println JsonOutput.prettyPrint(json)
    }
}


class Person {
    private String name
    private int age

    Person(String name, int age) {
        this.name = name
        this.age = age
    }

    String getName() {
        return name
    }

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

    int getAge() {
        return age
    }

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

输出结果如下:

[{"age":25,"name":"silence"},{"age":26,"name":"david"}]
[
    {
        "age": 25,
        "name": "silence"
    },
    {
        "age": 26,
        "name": "david"
    }
]

总结

本篇主要讲解了groovy的基本语法,整体上是和kotlin和java的语法是差不多的。相对而言,熟悉kotlin和java的,上手groovy会很快。

参考

暴力突破 Gradle 自动化项目构建(二)- Groovy 核心语法
Groovy教程

本文首发于我的个人博客:Gradle入门之Groovy语法

更多文章请关注我的公众号:码农职场
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值