`
yixiandave
  • 浏览: 138733 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Groovy笔记(不定期更新)

阅读更多
就懒得分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,而不是返回值
*/
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics