Groovy笔记(不定期更新)

就懒得分P了,直接放一篇文章里吧
接触Groovy大概一个月了,刚开始为它的简洁语法感到兴奋,不过随着深入使用,发现还是有一点问题的,一个是性能问题,一个是Debug单步执行的时候代码闭包产生的顺序混乱问题,还有语法检验变弱导致代码中容易埋下异常。

[color=red]自己也是初学,错漏之处还请及时指出[/color]
另外iteye的code标签什么时候能支持Groovy呢

不过一切对于Groovy带来的新语法特性来说还是非常划算的

[b]弱类型:[/b]
Groovy一个特点是弱类型的支持,def定义的元素可以是一个int,可以是一个String,可以是一个复杂对象,甚至可以是一个方法名,并且可以轻松的切换。强制类型转换除了java自身提供的
(String)strObj
这种形式以外,还提供了as语法:

strObj as String

这种方法给我的感觉就是少写几个括号吧

[b]字符串:[/b]
GString是Groovy的一个非常大的亮点,极大简化了传统String的拼接、比较、转义、多行拼接操作

def str = 'abc'//java String
def str2 = "abc${str}"//GString,${str}就是对上面str的引用,可以简写为$str
def str3 = """hello
asdfasdf
sss"""//3个引号中间的就是换行字符串,类似于html中的pre标签,内部的换行、空格、缩进全部会原样保留
def isEqual = (str==str2)//字符串比较直接使用连等
str.matches(/\w+/)//两个/中间的可以作为正则表达式使用,在java中\w必须转义写为\\w


[b]Array/Map/List[/b]
Groovy中的Array和List几乎可以通用,Map的使用也被极大简化

List<String> list = [];//List对象初始化可以用一对[]完成
list = [1,2,3,4];//数组可以直接转为List
println list[2] //List可以用数组下标的形式取值
Map<String,String> map = [:]//初始化一个Map可以用[:]的形式实现(中间是冒号),默认创建的是LinkedHashMap
map=['title':'hello','user':'user1']//Map可以以这种方式一次性赋值,在需要返回一个状态Map的时候非常有用
println map['title']//Map同样可以将key作为下标的形式取值


[b]遍历[/b]
Groovy中可不止一个each可以遍历哦
先复习以下each表达式

//遍历一个list/array
jsonArray.each{ JSONObject item->//类型可以不写,加类型就会作强制转换,each后面不写则默认是it
println item.toJSONString();
}
//遍历一个map
map.each{key,value->//两个参数分别对应key和value(可自定义名称和类型),只写一个参数就得到了Map.Entry对象
newMap[key]=value;
}


但是在使用过程中发现each无法break和continue,在代码块内写的return更是一点用都没有,如果需要break和continue,我们可以使用find

def numbers = [1,2,3,4,5]
numbers.find{
if(it==3){//不写->表达式则默认内部元素为it
return true;//相当于break
}
return false;//相当于continue
}

这种形式的语法和jQuery的each函数非常像

如果我们要在遍历一个元素过程中需要删除本节点,Groovy也提供了一个removeAll节点

def numbers = [1,2,3,4,5,6,7,8]
numbers.removeAll{
it%2==0//不写return直接返回最后一行执行结果,所以这里等效于return it%2==0
}
//it==[1,3,5,7]
//可以看出removeAll中return true则表示移除当前节点


[b]闭包[/b]
闭包这部分研究不是很深入,写一个demo

def connectString = { a,b->
'${a}with$b'
}
/*定义了一个connectString的闭包,可以当方法用,需要两个参数:a,b,可以定义类型,
返回类型无法定义,def connectString仅仅是定义了connectString的类型为def,而不是返回值
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值