概述
目录
- Groovy简单介绍
- 基础语法
- 数据类型
- 数据结构
- 容器类
- 闭包(Closure)
- 三个重要参数
- 闭包中的注意点
- 总结
从使用Android Studio开始,Gradle就是一个绕不来的话题,之前并不是很重视Gradle,一直就没有去学习,到最近的项目发现Gradle实在太强大,Gradle作为构建工具,对比于Maven、Ant来说,在依赖管理、构建生命周期、加载构建系统组件都有很大的优势。
这个后面慢慢介绍,由于Gradle的构建脚本是用Groovy,对比于Xml的优势也更加方便快捷,下面我会从Groovy开始介绍。
Groovy简单介绍
Groovy,脚本语言,我其实不想叫它脚本语言的,作为一门领域特定语言(DSL),相当有特色,首先它是运行在java虚拟机中的,说白了,就是Groovy先编译成java字节码,然后通过jvm来执行这个java类,人家虽然叫做脚本语言,可是java执行的步骤咱也一步不少。
啥环境搭建就不一一介绍了,百度一堆
基础语法
数据类型
- 变量
定义的方法:正常定义和def定义,正常定义和java无差,但是def定义充分体现其脚本语言的优势了
def a = 1 (a.class = Interger)
def b = 0.01 (b.class = Double)
def c = "hello" (c.class = String)
不同于java,Groovy没有基础类型只有对象类型,当然定义是可以用基础类型定义的
def x = 1
println x.getClass().getCanonicalName()
//输出结果:java.lang.Integer
- 字符串
String
‘’’ ‘’’ 三个单引号 直接定义有格式的字符串
GString 可扩展字符串
“The sum of 2 and 3 equals ${2 + 3}” 输出结果也为The sum of 2 and 3 equals 5,类型为org.codehaus.groovy.runtime.GStringImpl
GString和 String 可以相互转换
- switch case
灵活 判断起来 更方便 不仅可以判断数值还可以判断类型
- for循环
for(i in 0…9)
对于map的循环也不需要迭代器, 直接循环取值
数据结构
容器类
- List
变量定义:List变量由[]定义,比如
def aList = [5,'string',true] //List由[]定义,其元素可以是任何对象
变量存取:可以直接通过索引存取,而且不用担心索引越界。如果索引超过当前链表长度,List会自动
往该索引添加元素
assert aList[1] == 'string'
assert aList[5] == null //第6个元素为空
aList[100] = 100 //设置第101个元素的值为10
assert aList[100] == 100
那么,aList到现在为止有多少个元素呢?
println aList.size ===>结果是101
列表排序 sort()
列表查询 find() findAll() any() every() min() max()
- Map
容器变量定义
变量定义:Map变量由[:]定义,比如
def aMap = ['key1':'value1','key2':true]
Map由[:]定义,注意其中的冒号。冒号左边是key,右边是Value。key必须是字符串,value可以是任何对象。另外,key可以用''或""包起来,也可以不用引号包起来。比如
def aNewMap = [key1:"value",key2:true]//其中的key1和key2默认被
处理成字符串"key1"和"key2"
不过Key要是不使用引号包起来的话,也会带来一定混淆,比如
def key1="wowo"
def aConfusedMap=[key1:"who am i?"]
aConfuseMap中的key1到底是"key1"还是变量key1的值“wowo”?显然,答案是字符串"key1"。如果要是"wowo"的话,则aConfusedMap的定义必须设置成:
def aConfusedMap=[(key1):"who am i?"]
Map中元素的存取更加方便,它支持多种方法:
println aMap.keyName <==这种表达方法好像key就是aMap的一个成员变量一样
println aMap['keyName'] <==这种表达方法更传统一点
aMap.anotherkey = "i am map" <==为map添加新元素
- Range
Range是Groovy对List的一种拓展
def aRange = 1..5 <==Range类型的变量 由begin值+两个点+end值表示
左边这个aRange包含1,2,3,4,5这5个值如果不想包含最后一个元素,则
def aRangeWithoutEnd = 1..<5 <==包含1,2,3,4这4个元素
println aRange.from //1
println aRange.to //4
闭包(Closure)
闭包是Groovy中一种非常重要的数据类型,从结构来看就是代码块
def aClosure = {
Stringparam1, int param2 ->
println"this is code"
}
参数 -> 左边为参数 右边为代码块 可以使用${}引用代码块
三个重要参数
- this:代表闭包定义处的类
- owner:代表闭包定义处的类或者对象
- delegate:代表任意对象 (默认owner一致)
闭包中的注意点
省略圆括号
task printX{
doLast{
println "dolast"
}
def x = 1
println x.getClass().getCanonicalName()
}
其实省略的就是
doLast({
//....
})
只要函数的参数为closure,它的()就可以省略
总结
其实在日常使用的过程中,你不可能知道groovy所有api的使用,只有多翻翻它的api,使用起来才会更加随心所欲,为所欲为 - -!!!
总之,Groovy也是一门语言,需要花精力去深入,因为我们使用的范围是Gradle,所以用得到的也只是一部分,再深入学习收益就不是很大了,当然也根据个人情况考虑。
Groovy API文档
后面就开始学习Gradle,对于Gradle,从Android的角度看,它就是一个工具,学会配置脚本也就差不多了,但是如果你把它做为一个编程框架来学习,那你就需要更加深入的内容了。
最后
以上就是机灵唇彩为你收集整理的【Gradle学习】—— Groovy基础语法以及数据结构Groovy简单介绍总结的全部内容,希望文章能够帮你解决【Gradle学习】—— Groovy基础语法以及数据结构Groovy简单介绍总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复