Gradle系列相关文章:
1、Gradle理论与实践一:Gradle入门
2、Gradle理论与实践二:Groovy介绍
3、Gradle理论与实践三:Gradle构建脚本根底
4、Gradle理论与实践四:自界说Gradle插件
5、Gradle装备subprojects和allprojects的差异:subprojects和allprojects的差异
Groovy介绍
Groovy
是根据JVM
虚拟机的一种动态言语,语法和Java
十分相似,Groovy
代码在履行时相同编译成Class
字节码在JVM
上履行,能够认为Groovy
扩展了Java
言语。除此之外,Groovy
还支撑闭包、支撑DSL
(Domain Specific Lauguage
领域特定言语),是一门十分灵敏的脚本言语。
Groovy、Java、JVM之间的关系:
Groovy
的一些特色:
-
Groovy
句子能够不用分号结束; -
Groovy
运用def
关键字界说变量(def
不是有必要的,但建议不要省掉),界说变量的时分能够不指定其类型;相同Groovy
界说函数时,参数也能够不指定类型; -
Groovy
除了变量和函数中的参数能够不指定类型,函数中假如有返回值,能够省掉return
,函数中最终一句代码履行成果即是返回值。
1、字符串处理
在Java
中,双引号代表一个字符串,单引号代表是字符;在Groovy
中,单引号和双引号都能够界说一个字符串常量,但是单引号和双引号也是有差异的,如下:
vatask hello {
def name = "beijing"
doLast {
print "双引号:name is ${name}\n"
print '双引号:name is ${name}'
}
}
成果:
bogon:test_gradle mq$ gradle -q hello
双引号:name is beijing
双引号:name is ${name}
从输出成果能够得出结论:单引号是不具备运算能力的,一切表达式都被认为是字符串;而双引号能够经过${}表达式放入变量或者进行表达式计算。
2、集合的声明与操作
List
对应Java
中的List
接口,其实现类是ArrayLIst
.
- 界说List:
def myList = [1, 2, 3, 4, 5]
myList
的类型是java.util.ArrayList
- List取值:
print numList[0]//拜访第一个元素 成果为1
print numList[1]//拜访第二个元素 成果为2
print numList[-1]//拜访倒数第一个元素 成果为5
print numList[1..3]//拜访第二个到第四个元素 成果为[2,3,4]
可见在Groovy
中索引值不只能够是正的,还能够是负的,表示从右往左数;还能够是一个范围索引(如1..3
);假如索引越界,返回Null
。
- 遍历List
运用
List.each
即可遍历LIst
,如:
task hello << {
def numList = [1, 2, 3, 4, 5]
numList.each {
print it
}
}
Map
- 界说
Map
、Map
取值、遍历Map
//界说Map 以K-V办法保存 其间country、city为Key值,china、beijing为value
def myMap = ['country': 'china', 'city': 'beijing']
//下面两种办法都能够获取到key对应的value
print myMap.country //成果为china
print myMap['country'] //成果为china
//map迭代也是用each办法,迭代的元素是一个Map.Entry
myMap.each {
print "Key:${it.key},value:${it.value}"
}
3、办法
- 办法的括号是能够省掉的,如下:
static def mMethod(int a, int b) {
return a + b
}
task hello << {
//下面两种办法成果是相同的
mMethod(2, 3)
mMethod 2, 3
}
mMethod
中的return
也是能够省掉的,当没有return时,Groovy会把办法履行过程中的最终一句代码作为其返回值。
- 代码块(闭包
closure
)能够作为参数传递
被{}包围起来的代码被称为代码块。Groovy
答应一个代码块能够作为参数传递到办法里的,如下面三种办法:
task hello << {
def myList = [1, 2, 3, 4, 5]
//第一种:办法中传入代码块{}
myList.each({ print it })
//第二种:Groovy规定,假如办法最终一个参数是闭包,能够放到办法外面
myList.each() { print it }
//第三种:办法括号能够省掉,就变成咱们最常见的办法了
myList.each {
print it
}
}
4、闭包
闭包(Closure
)是一种数据类型,通俗来说便是一段可履行的代码块。来自界说一个闭包:
static def customClosure(closure) {
def myMap = ['name': 'mq', 'country': 'china']
myMap.each {
//闭包中有两个参数
closure(it.key, it.value)
}
}
task hello << {
customClosure {
//声明多个参数 对应闭包中的key和value
k, v ->
print "${k} is ${v}\n"
}
}
当闭包中有一个参数时,默许便是it;当有多个参数时,就不能用it了,需求声明多个参数。如用 (k,v
) 声明闭包中的两个参数, ->操作符用于把闭包的参数和主体区分开。