Groovy语法

2021-03-31  本文已影响0人  dashingqi
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
 */
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
}
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)

上一篇下一篇

猜你喜欢

热点阅读