1 groovy
groovy语言是一种基于JVM的面向对象的语言,结合了Ruby和java,也添加了少量python的内容。
2 groovy与java的不同
这个要注意两者的不同之处
默认导入一些包
多态:groovy在方法运行时根据参数类型选择,java在编译时根据声明的类型选择
不需要分号
不需要强制类型声明
方法调用时可以省略括号和点
不需要return返回
DSL
数组定义用[],java用{}
支持闭包
方法和类默认为public
闭包迭代
switch语句支持所有对象
安全导航符:?.
groovy中 == 是比较内容,比较引用用.is
3 基本语法
3.1 注释
单行注释://
多行注释:
/*
*/
文本注释:
/**
*
*/
3.2 关键字
groovy关键字有很多,主要介绍一些java中没有的关键字。
as:
用来类型转换
List list = ['a','b']
ArrayList list1 = list as ArrayList //list转Arraylist,其中as可省略
用做同义词
class Person
{
def name
}
import groovy.Person as PE //将类名Person等价为PE
assert:测试逻辑是否正确,这个在groovy应用非常广泛
assert 1 == 2
会报告有逻辑错误,常用来测试方法的输出是否正确
3.3 标识符
普通标识符:字符,$和_ 组成
引用标识符:.开头,可用单引号或双引号括住,groovy所有字符串都可以当做引用表示符号
per.name="xx"
下面三种引用等价:
per.name
per.'name'
per."name"
3.4 循环语句
while/for/for-in 和java基本一样
for(i in 0..10){ } //k的类型可以省略
3.5 条件语句
if/if-else/switch
switch与java不同的地方为:
case可以使用任何对象,尤其是在case中使用List和Range,使分支满足多个条件。
def x = 1
switch(x){
case 1:
break
case "xxx":
break
case [1,2,3]:
break
case 2..6:
break
default:
}
3.6 trait(特征)
这个在实际中很少用到
需要了解的是trait的多继承和冲突覆盖问题。
3.7 闭包closure
闭包是个非常重要的概念,在groovy和python中有大量应用,可以很方便的解决很多问题。这在下一节中仔细讲解。
4 数据结构
groovy有三种数据结构:List/Map/Range
4.1 List:列表
定义:
def list1 = [] //空list
def list2 = [1,2,3] //int型
def list3 = ['1','2','3'] //字符串类型
def list4 = [1,2,[3,4]] //嵌套类型
def list5 = [1,2,"3",[4,6],8.2] //异构类型
常用方法:
增加:add()/<</+=/list[list.size()+1]/plus() 注意这些方法的不同
增加一个元素add,增加多个元素时plus()
删除:pop()/minus()/-=/remove()
清除:clear()
索引:get()/getAt() //getAt()支持负索引,[]根据下标索引
解开:flatten()
翻转:reverse()
排序:sort()
求和:sum() //可指定初始值
最值:max()/min()
添加:join() //为每个元素之间添加字符串
注入:inject() //累积功能
不完整切片:groovy支持不完整的切片
def list = [1,2,3,4,5]
list[0,2] //下标为0,2的值
list[1:-1] //下标为1到-1的值
遍历操作:for-in/闭包函数each,find,collect
def list = [1,2,3,4]
//for-in遍历
for(e in list){
print(e)
}
//闭包:each遍历
list.each{
if(it == 3)
return true //each循环控制:相当于contiune
print(it)
}
//闭包:find遍历
list.find{
if(it == 3)
return true //find循环控制:相当于break
print(it)
}
//闭包:collect遍历,其将输出的结果作为一个集合返回
list.collect{
it + 1 //将所有元素加1
}
过滤操作:find/indexOf/every/any/inject
list = [1,2,3,4,5]
list.find{ it > 1} //找出第一个符合条件的元素
list.findAll{ it > 1} //找出所有符合条件的元素,结果为List,[2,3,4,5]
list.indexOf(1) //返回元素在list的下标,没有找到则返回-1
list.every{ it > 2} //如果每一个元素都满足,则返回true
list.any{ it > 1} //如果有任意一个元素满足则返回true
4.2 Map:映射
定义:
def map = [:]
def map1 = [1:2]
方法:
添加:put()/putAll()
删除:remove()
包含:containsKey/containsValue
取值:get() //获取键对应的值
索引:.key //key为下标,map.key等价与map.[“key”]
遍历:for-in/闭包方法each/find
def map = [1:2,3:4]
map.each{ println("$it.key:$it.value")}
map.find{ if(it.key == 1){ } }
for(e in map){ }
4.3 Range:范围
其实是一个连续的List,常用在for-in循环
定义:
1..10 //1到10
1..<10 //1到9
5 groovy方法
1.定义方法:关键字def或者返回值类型
def function(){
print("xxx")
}
定义带参数的方法:参数可以不指定类型
def function(p1,p2){
print("xxx")
}
定义带默认值参数的方法:
def function(p1,p2,p3=3){
print("xxx")
}
方法返回值:
方法可以返回值可以为void
可以用return返回一个值
没有return,则将最后一行表达式的值返回
def function(p1,p2){
p1 + p2
p1 * p2 //返回的是该处的值
}
下一篇:闭包https://blog.csdn.net/weixin_42774617/article/details/107775453