美文网首页
Groovy语法

Groovy语法

作者: dashingqi | 来源:发表于2021-03-31 00:47 被阅读0次
    Android_Banner.jpg
    介绍

    Groovy是Apache下的一种基于JVM的面向对象语言,既可以用于面向对象编程,也可以用作纯粹的脚本语言

    变量的定义

    Groovy中用def关键字来定义变量,
    我们可以不指定变量的类型,默认的访问修饰符是public

    def a = 1;
    def int b = 2;
    def c = "Hello World"
    
    方法的定义

    方法使用返回值类型或者def关键字定义,方法可以接受任意数量的参数

    def add(int c,int d){
        println c+d
    }
    
    def minus(e,f){
        println e-f
    }
    

    如果指定了方法返回类型,可以不需要使用def关键字

    int add(int a,int b){
        return a-b
    }
    

    如果不使用return,方法的返回值为最后一段代码的执行结果

    int add(int a,int b){
       a+b
    }
    
    class Person {
        String name
        Integer age = 20
    
        def increaseAge(Integer years) {
            this.age += years
        }
    }
    
    def p = new Person()
    p.increaseAge 5
    print p.age
    // 25
    
    Groovy中的类和Java中的类很相似
    
    默认类的修饰符是public
    类不需要与它的源文件有相同的名称,但还是建议采用相同的名称
    没有可见性修饰符的字段会自动生成对应的setter和getter方法
    
    语句
    • 断言
    task method1{
        doLast {
            assert 1+2 == 6
        }
    }
    
    /**
     * 运行结果
     * > assert 1+2 == 6
     *           |  |
     *           3  false
     */
    
    • for循环
    Groovy支持Java的for(int i=0;i<n;i++)和for(int i:array)形式的循环语句,
    另外还支持for in loop形式。
    支持遍历范围、列表、Map、数组和字符串多种类型
    
    for in loop 形式(遍历范围)
    def x = 20
    for (i in 0..4) {
        x += i
    }
    println x
    
    遍历列表
    for(i in [0,1,2,3,4]) {
        x += i
    }
    
    遍历map
    
    def map = ['a': 1, 'b': 2, 'c': 3]
    for(v in map.values()){
        x += v
    }
    
    • switch
    def y = 16
    def value = ""
    
    switch (y) {
        case "ok":
            value = "found ok"
            break
        case [1, 23, 4, 5, 'list']:
            value = 'list'
            break
        case 10..19:
            value = "range"
            break
        case Integer:
            value = "integer"
            break
        default:
            value = "default"
            break
    }
    
    println value
    

    数据类型

    字符串

    单引号字符串

    单引号可以定义一个字符串常量,但是不支持插值,
    在Groovy中双引号字符串支持插值

    双引号字符串

    双引号字符串支持插值,插值值得就是替换字符串中的占位符,占位符表达式位{}或者

    def name = 'dashingqi'
    //插值
    println "hello ${name}"
    println "hello $name"
    
    三引号字符串

    三引号字符串的特点是可以保留文本的换行和缩进格式,不支持插值。

    def name1 = '''
           zhangqi
                dashingqi
           zhangqi'''
    println name1
    
    
    GString

    在Groovy中,String是不可变的,GSting是可变的,
    GString类型就是双引号字符串中包含了插值,就是GString类型

    List

    def number = [1,2,3,4]
    def linkedList instanceof list
    
    println number[1]
    // 索引-1是列表末尾的第一个元素。
    println number[-1]
    
    

    Map

    创建Map使用[],需要同时制定Key和Value,默认的实现类位LinkedHashMap

    
    def names = [one:'zhangqi',two:'dashingqi',three:'zdq']
    println names['one']
    println names['two']
    
    
    def key = 'name'
    // 此时键对应的值是key这个字符串
    def person = [key:'张琦']
    if(person.containsKey(key)){
        println person['key']
    }
    // 此时键对应的值是变量key对应的name这个值
    person = [(key):"DashingQi"]
    if(person.containsKey('name')){
        println person[key]
    }
    
    #### 闭包
    
    闭包的定义
    {params -> statements}
    params:参数部分
    statements:语句部分
    
    
    ```java
    
    def code = { 123 }
    def isOddNumber = { i -> i % 2 != 0 }
    println isOddNumber(5)
    println code()
    
    

    I/O操作

    文件读取
    // 声明一个文件地址
    def filePath = '/Users/zhangqi/downloads/Test.java'
    
    // 获取文件对象
    def file = new File(filePath)
    // 读取文件
    file.eachLine { it ->
        println it
    }
    
    // println(file.text) 简洁的写法
    
    文件写入
    
    file.withWriterAppend { it ->
        it.println("class Test {")
        it.println("    public static void main(String args[]) {")
        it.print("\n")
        it.println("     }")
        it.println("}")
    
    }
    println(file.text)
    
    

    相关文章

      网友评论

          本文标题:Groovy语法

          本文链接:https://www.haomeiwen.com/subject/vbnnhltx.html