groovy:
- 基于JVM敏捷语言;
- 与Java完美结合,可以使用Java所有类库;
- 语法上支持动态类型def,闭包
- 更敏捷,语法糖很多
- 可编程,可脚本
//动态类型 随时切换
def p = 123
p = "blade"
p = 12.5
p = [3, 6, "hello"]
//但是建议自己使用的变量定义弱类型def,对外使用要强类型
//强大到可怕case任意类型。有了它,if else 嵌套不可能的。
def a = 16.8
def result = "default"
switch (a) {
case "price":
result = "String"
break
case 10..15: //范围
result = "range"
break
case Integer:
result = "Integer"
break
case [-7, 1403, 16.8, "hello", 5.0f]:
result = "list"
break
default:
break
}
println result // 打印结果:list
//对范围循环
def sum = 0
for (i in 0..9) {
sum += i
}
println "range sum = ${sum}" //打印结果:range sum = 45
// 对list的循环,别惊讶[]像数组 就是list
sum = 0
for (i in [3, 5, 1, 6, -8, 11]) {
sum += i
}
println "list sum = ${sum}" //打印结果:list sum = 18
//对Map循环,不需要迭代器
for (i in ["apple": 5.8, "banana": 3.5, "pear": 2.3, "orange": 4.6]) {
println "${i.key}'s price : ${i.value}"
}
//闭包基本概念:
def closurer = { println 'hello 闭包' }//定义
//调用 非常类似于方法
closurer()// 或者closer.call()
//有参数的闭包:
def closer2 = { String name, int age -> println "姓名:${name},今年${age}岁" }
closer2("法外狂徒张三", 23)
// 默认参数it
def close3 = { println "匹配${it}个投递职位" }
close3(48)
//闭包一定有返回值,显示声明return的数据类型,或者 无声明就返回null
//闭包基本使用: 1.基本数据类型,2.String,3.数据结构,4.文件
//例如:求阶乘 downto()和upto()
def fab(int count) {
def r1 = 1
count.downto(1, { num -> r1 *= num })
println "downto result ${r1}"
def r2 = 1
//闭包为最后一个参数时,既可以圆括号内 也可以圆括号外,习惯放在()外
r2.upto(count) { num -> r2 *= num }
println "upto result ${r2}"
//如何知道闭包参数个数和类型(如:num),要点进去看源码
}
int x = 5
fab(x)//打印结果:downto result 120 upto result 120
int cal(int number) {
int result = 0
//times 只有一个参数,就是闭包,这是groovy最常见的使用方式
number.times {
temp -> result += temp
}
return result
}
println cal(100)//从0开始表示0~99共10哦数据的求和,不含100
/**
* 字符串与闭包
*/
String str = "the 2 and 3 is 5"
//each遍历,each 返回值是调用者本身
str.each {
//定义闭包体
String temp -> print temp.multiply(2)
}
//打印结果:tthhee 22 aanndd 33 iiss 55
println "----------------------"
//find 查找第一个符合条件的值,闭包体必须 是boolean返回值
def r3 = str.find {
String s -> s.isInteger()
}
println r3 //2
//findAll返回Collection
def list = str.findAll {
String s -> s.isNumber()
}
println list.toListString() //[2, 3, 5]
//any 返回值boolean,只要包含一个符合条件 就返回,类似 ||
str.any { String s -> s.isNumber() }
//every 返回值boolean 全部满足才返回true,类似&&
str.every { String s -> s.isNumber() }
//collect
def list2 = str.collect { it.toUpperCase() }
println list2.toListString()//[T, H, E, , 2, , A, N, D, , 3, , I, S, , 5]
//闭包 关键变量 this owner delegate 开发中并不常用
如何在Android Studio上运行Groovy工程:https://blog.csdn.net/Gdeer/article/details/83062523