Groovy笔记(不定期更新)
程序员文章站
2022-06-07 15:21:04
...
就懒得分P了,直接放一篇文章里吧
接触Groovy大概一个月了,刚开始为它的简洁语法感到兴奋,不过随着深入使用,发现还是有一点问题的,一个是性能问题,一个是Debug单步执行的时候代码闭包产生的顺序混乱问题,还有语法检验变弱导致代码中容易埋下异常。
自己也是初学,错漏之处还请及时指出
另外iteye的code标签什么时候能支持Groovy呢
不过一切对于Groovy带来的新语法特性来说还是非常划算的
弱类型:
Groovy一个特点是弱类型的支持,def定义的元素可以是一个int,可以是一个String,可以是一个复杂对象,甚至可以是一个方法名,并且可以轻松的切换。强制类型转换除了java自身提供的
这种方法给我的感觉就是少写几个括号吧
字符串:
GString是Groovy的一个非常大的亮点,极大简化了传统String的拼接、比较、转义、多行拼接操作
Array/Map/List
Groovy中的Array和List几乎可以通用,Map的使用也被极大简化
遍历
Groovy中可不止一个each可以遍历哦
先复习以下each表达式
但是在使用过程中发现each无法break和continue,在代码块内写的return更是一点用都没有,如果需要break和continue,我们可以使用find
这种形式的语法和jQuery的each函数非常像
如果我们要在遍历一个元素过程中需要删除本节点,Groovy也提供了一个removeAll节点
闭包
闭包这部分研究不是很深入,写一个demo
接触Groovy大概一个月了,刚开始为它的简洁语法感到兴奋,不过随着深入使用,发现还是有一点问题的,一个是性能问题,一个是Debug单步执行的时候代码闭包产生的顺序混乱问题,还有语法检验变弱导致代码中容易埋下异常。
自己也是初学,错漏之处还请及时指出
另外iteye的code标签什么时候能支持Groovy呢
不过一切对于Groovy带来的新语法特性来说还是非常划算的
弱类型:
Groovy一个特点是弱类型的支持,def定义的元素可以是一个int,可以是一个String,可以是一个复杂对象,甚至可以是一个方法名,并且可以轻松的切换。强制类型转换除了java自身提供的
(String)strObj这种形式以外,还提供了as语法:
strObj as String
这种方法给我的感觉就是少写几个括号吧
字符串:
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
Array/Map/List
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作为下标的形式取值
遍历
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则表示移除当前节点
闭包
闭包这部分研究不是很深入,写一个demo
def connectString = { a,b-> '${a}with$b' } /*定义了一个connectString的闭包,可以当方法用,需要两个参数:a,b,可以定义类型, 返回类型无法定义,def connectString仅仅是定义了connectString的类型为def,而不是返回值 */