Gradle Cheat Sheet (1): Groovy Fundamentals
本系列整理自Udacity上Gradle 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
本部分的完整代码可以在这里找到。