前言 {#前言}
这个系列将会有以下内容:
什么是Groovy {#什么是Groovy}
在学习Gradle以前,须要简单普及一下Groovy的语言基础.Groovy是一门jvm语言,特定领域的语言,里面的水特别深.咱们不须要所有记住和掌握,只须要记得一些经常使用的,不清楚的马上去查API 文档.java
由于目前Android的主流构建工具是用的Gradle,而Gradle使用时就须要用到Groovy,还有Gradle DSL和Android DSL.Gradle里面其实东西比较多.随便说几个,好比渠道包(差别包),AOP,插桩,热修复,插件化等等,都须要用到Gradle.因此咱们Android开发人员对于Gradle的需求很是大.有必要搞清楚.闭包
简单使用Groovy {#简单使用Groovy}
打开Android Studio,随便新建一个Android项目.点击顶部Tools->Groovy Console便可,这时AS会出来一个窗口,专门拿来运行那种临时的Groovy代码的.由于是在本地执行,因此执行速度会很是快.写好代码后点击窗口左上角的三角按钮便可运行代码.jvm
语法 {#语法}
groovy的语法比java简洁不少函数
简单示范 {#简单示范}
|------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| int r = 1 def a = 1 a = 'da' println(a) def b = "dasa" def c = 56.4 //调用下面的test方法 def d = test() println(d) def test() { println("test method") return 1 } //输出 da test method 1
|
- groovy中不用写分号
- 变量类型能够省略
- 方法返回类型能够省略,上面test方法中的return也能够省略
- 变量类型比较弱,能够推断出来
- 字符串能够用双引号或者单引号包起来
String {#String}
|---------------------------------|-----------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11
| def name = "zhangsan" def b = 2 def test(a, b) { println("a=${a} b=${b}") } test(name, b) //输出 a=zhangsan b=2
|
- String中若是须要使用到变量,则须要使用$和{}关键字,而且须要使用双引号的时候才能这样用
- 能够看到方法的入参那里也能够省略类型
- Java中String有的方法,它都有
闭包 {#闭包}
闭包感受有点像kotlin的高阶函数(不知道对不对),能够将一个闭包做为参数传入方法,也能够赋值给变量.而后调用call方法便可调用闭包.kotlin是调用invoke.工具
|---------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13
| //定义闭包 闭包的参数 def closure = { int a, String b -> println("a=${a} b=${b}") //闭包返回值 return a + b } //调用闭包 定义result变量不用写def也能够,666 result = closure.call(1, "name") println(result) //输出 a=1 b=name 1name
|
- 闭包使用call方法调起,须要传入参数
- 闭包定义时的参数类型是能够省略的
List {#List}
比Java中的更增强大.当遇到不会的方法的时候去查API文档,好比下面的示例代码中的each闭包,你确定不知道闭包的参数是什么,这时咱们打开,List的文档地址,找到each方法,知道了原来是遍历每一个元素,参数是每一个元素.学习
|---------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| //list 能够存放不一样的数据类型 def list = [1, "test", true, 2.3] list.each { item -> println(item) } list.each { println(it) } //输出 1 test true 2.3
|
- 闭包的参数只有一个时是能够省略的,在里面使用时用it代替.和kotlin很像.
- list支持list[1]这种形式的访问
Map {#Map}
|------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| //空的map def map1 = [:] // def map = ["id":1, "name":"xfhy"] map['id'] = 2 println(map['id']) map.id = "idStr" println(map.id) map.each { key, value -> println("key=${key} value=${value}") } map.each { entry -> println(entry) } //输出 2 idStr key=id value=idStr key=name value=xfhy id=idStr name=xfhy
|
- map支持
map['id']
访问和赋值 - 也支持map.id访问和赋值
- each遍历支持2种闭包,使用方式如上,记不清楚不要紧,使用的时候去查API就行
IO {#IO}
groovy的文件操做也是很是很是好使ui
|---------------------------|------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9
| def file = new File("D:/test.txt") file.eachLine { line, lineNo -> println("第${lineNo}行 $line") } //输出 第1行 name 第2行 age 第3行 book
|
- 很是好用,简单直接地读取文件内容
- 其余好用的API,请参阅这里
类 {#类}
|------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| class Book { String bookName double price } def book = new Book() book.with { bookName = '字典' price = 24.5 } println(book.bookName) println(book.price) book=null println(book?.price) //输出 字典 24.5 null
|
- 使用with操做符,能够对book对象内部属性进行操做,调用方法等
- 使用?能够避免空指针,省得判空.就像kotlin同样,很棒.
总结 {#总结}
我个人认为,基础掌握差很少这么多就好了,剩下的遇到了再查官方文档。
参考链接:https://blog.csdn.net/xfhy_/article/details/103329430