Gradle Cheat Sheet (1): Groovy Fundamentals

  本系列整理自UdacityGradle for Android and Java课程(国内需访问中文版用Gradle构建Android和Java),旨在提供一份快速参考手册,以便查用。

0. Gradle与Groovy

  Gradle编译脚本是基于Groovy编写的。Groovy是一个运行于JVM的脚本语言,支持DSL(Domain Specific Languages),具有很高的可读性。

  为了运行后续的代码,首先建立build.gradle文件,开头一行输入:

task groovy << {}

建立一个空任务,之后可以通过如下命令执行脚本:

$ gradle groovy

1. Hello Groovy!

  可以使用println输出字符串并换行。

println "Hello Groovy!"

2. 使用Java

  Groovy可以与Java进行互操作,也可以访问Java的标准库。如建立一个Java类:

class JavaGreeter {
    public void sayHello() {
        System.out.println("Hello Java!");
    }
}
JavaGreeter greeter = new JavaGreeter()
greeter.sayHello()

3. 动态类型

  Groovy是动态类型语言,在运行时进行类型检查。不需要声明变量的类型:

def foo = 6.5

  在字符串中,可以通过在变量名前加$ 来插入变量的值:

println "foo has value: $foo"

输出为:

foo has value: 6.5

  可以在$ 后的大括号里插入Groovy代码:

println "Let's do some math. 5 + 6 = ${5 + 6}"

输出为:

Let's do some math. 5 + 6 = 11

  可以给一个变量赋予不同类型的值,通过foo.class可以查看变量foo的类型:

println "foo is of type: ${foo.class} and has value: $foo"
foo = "a string"
println "foo is now of type: ${foo.class} and has value: $foo"

输出为:

foo is of type: class java.math.BigDecimal and has value: 6.5
foo is now of type: class java.lang.String and has value: a string

4. 函数的定义

  使用def定义函数:

def doubleIt(n) {
    n + n // Note we don't need a return statement
}

不需要指明参数和返回值的类型,也不需要使用return显式地指明返回值,函数把最后一个表达式作为返回值。

5. 函数的调用

  可以使用“函数名(参数)”的方式调用函数:

foo = 5
println "doubleIt($foo) = ${doubleIt(foo)}"

输出为:

doubleIt(5) = 10

  由于字符串类型重载了加号运算符用于拼接字符串,也可以把字符串作为参数传递给doubleIt :

foo = "foobar"
println "doubleIt($foo) = ${doubleIt(foo)}"

输出为:

doubleIt(foobar) = foobarfoobar

  对于至少有一个参数的函数,在没有歧义的情况下,可以省略括号(如前面一直使用的println)。定义如下三个函数,分别有0个、1个和2个参数:

def noArgs() {
    println "Called the no args function"
}

def oneArg(x) {
    println "Called the 1 arg function with $x"
    x
}

def twoArgs(x, y) {
    println "Called the 2 arg function with $x and $y"
    x + y
}

  调用oneArg 和twoArgs 都可以省略参数括号:

oneArg 500 // Look, Ma! No parentheses!
twoArgs 200, 300

输出为:

Called the 1 arg function with 500
Called the 2 arg function with 200 and 300

  noArgs 没有参数,调用它的时候必须带括号:

noArgs()

输出为:

Called the no args function

  有时候不使用括号会存在歧义,如

twoArgs oneArg 500, 200

会导致错误:

build file 'XXX': 147: expecting EOF, found ',' @ line 147, column 19.
twoArgs oneArg 500, 200 // Also doesn't work as it's ambiguous
                  ^

这时就要通过括号消除歧义:

twoArgs oneArg(500), 200

输出为:

Called the 1 arg function with 500
Called the 2 arg function with 500 and 200

 

本部分的完整代码可以在这里找到。