欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Groovy笔记(不定期更新)

程序员文章站 2022-06-07 15:22:58
...
就懒得分P了,直接放一篇文章里吧
接触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,而不是返回值
*/
相关标签: groovy