携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第十三天,点击查看活动详情
重学Android之----Gradle(三)
前言
我们知道Gradle是Groovy语言来编写的,Groovy是一种基于JVM(java虚拟机的敏捷开发语言,它结合了Python、Ruby和Smalltalk语言的许多强大特性,Groovy代码能够与Java代码很好地结合,也能用于扩展现有代码。由于其运行在 JVM 上的特性,Groovy也可以使用其他非Java语言编写的库。
本章将会带你学习Groovy的基础语法
字符串
任何一门语言都会有字符串,基本也会从字符串学起,相比Java而言,Groovy非常方便,比如字符串的运算、求值、正则等。
在
Groovy中,和Kotlin一样,分号可以去掉,没有强制要求。所以在Gradle脚本中没有分号,这是Groovy的特性,不是Gradle的特性。
在Groovy中,字符串可以使用单引号或者双引号,者都已定义一个字符串常量,但他们有所区别
- 单引号:只能标记纯粹的字符串常量
- 双引号:可以在字符串中进行表达式运算
看一下实例:
task printStr {
def str1 = "hello"
def str2 = "world"
println str1 + str2 + "1"
println "${str1}${str2}2"
println "$str1 $str2 3"//只有一个变量可以去去掉{}
println 'hello world4'
}
输出:
helloworld1
helloworld2
helloworld 3
hello world4
解析:
双引号的字符串是可以做表达式的操作,所以在双引号中可以用 {} 的形式声明调用变量,这里是和Kotlin的一样,单引号就只能做简单的字符串声明,不能进行表达式。
集合
Groovy中的集合完全兼容了Java的集合,还进行了扩展。
List
在创建List的时候,和Kotlin中一样不需要使用 new
task printList {
def numlist = [1,2,3,4,5,6]
println numlist.getClass().name
for (def i = 0; i< numlist.size();i++){
println numlist.get(i)
}
}
输出:
java.util.ArrayList
1
2
3
4
5
6
解析:
我们声明了一个list,不需要用new,直接[]表示,这里我Kotlin,再使用for循环遍历一遍。
我们发现numlist是一个 ArrayList类型。那么对于ArrayList中可以操作的和java一样,但是语法和Kotlin一致。
task printList {
def numlist = [1,2,3,4,5,6]
println numlist[1]
println numlist[-1]
println numlist[-2]
println numlist[1..3]
}
输出:
2
6
5
[2, 3, 4]
解析:
Groovy提供了下标索引的方式访问,就像数组一样,还提供了负下标和范围索引。
- 负小标:代表从右边开始,-1 代表右边的一个
- 范围索引:代表是一个区间范围,..来分开。1..3表示1到3的范围
当然在迭代方面可以使用上面的for循环,也可以下面的each
numlist.each{
println it
}
这都是和Kotlin中一样,不过多解释。
Map
Map和List相似,Map是以键值对<K,V>的形式。
我们看一下使用。
task printMap{
def map = [1:"one",2:"two"]
println map.getClass().name
println map[1]
println map.size()
}
输出:
java.util.LinkedHashMap
one
2
解析: 我们发现map是LinedHashMap。用法也和Kotlin一样
方法
Groovy方法不像Java使用void也不想Kotlin使用fun声明,这里是使用def。
括号可以省略
在Java或者Kotlin中调用方法都需要()来调用方法,我们直接看一下实例:
task testFun{
sum(1,2)
sum 1,2
}
def sum(int a, int b){
println a+b
}
输出:
3
3
解析:
调用方法的时候可以加上括号,也可以不用加,这样的语法会更简洁
return可以省略
在方法中需要返回数据,java中就需要使用return来返回,但在Groovy中就可以省略,这样Groovy就可以吧方法的最后一句代码作为返回值
task testFun{
def sum1 = sum 1,2
def sum2 = sum 8,2
println sum1
println sum2
}
def sum(int a, int b){
a+b
}
输出:
3
10
解析:
我们在sum方法中没有使用return返回a+b,但是结果还是返回了a+b
代码快可以作为参数传递
代码快就是一段被花括号包围的代码,也就就是闭包。在Groovy中允许他们作为参数传递,我们就一List中的each来举例
numlist.each({println it})
//如果最后一个参数是闭包,也可以放到外面
numlist.each(){println it}
//也可以省略圆括号
numlist.each{
println it
}
JavaBean
JavaBean就类似于Kotlin的Data,我们不需要重复生成getter、settter方法
task hellobean{
User user =new User()
//也可以
//def user =new User()
user.name = "lisi"
println user.name
}
class User {
String name
}
输出:
lisi
注意:在创建对象的时候new是不能省略的,这个和List不同。 可以用类型来持有,也可以用def来持有
我们在看一下下面这个例子:
task hellobean{
User user =new User()
//也可以
//def user =new User()
user.name = "lisi"
println user.name
println user.age
}
class User {
String name
int getAge(){
20
}
}
解析:
我们定义了一个getAge()方法,我们在调用的时候可以省略get直接age,这里也是和Kotlin语法一样。