Groovy轻松入门
2012-08-08 12:15:19 来源:WEB开发网核心提示:collect<<"Come on" collect[collect.size()]=100.0 Collection使用类似数组下标的方式进行检索: collect[collect.size()-1] collect[5] groovy支持负索引: println collect[-1
collect<<"Come on"
collect[collect.size()]=100.0
Collection使用类似数组下标的方式进行检索:
collect[collect.size()-1]
collect[5]
groovy支持负索引:
println collect[-1] //索引倒数第1个元素
println collect[-2] //索引倒数第2个元素
Collection支持集合运算:
collect=collect+5 //在集合中添加元素5
println collect[-1] //索引倒数第1个元素
collect=collect-"a" //在集合中减去元素a(第1个)
println collect[0] //索引集合中第1个元素(现在是b)
同样地,可以往集合中添加另一个集合或删除一个集合:
collect=collect-collect[0..4] //把集合中的前5个元素去掉
println collect[0] //现在集合中只有1个元素,即原来最后一个
println collect[-1] //也可以用负索引,证明最后一个元素就是第一个元素
(2)Map
Map是“键-值”对的集合,在groovy中,键不一定是String,可以是任何对象(实际上Groovy中的Map就是java.util.LinkedHashMap)。
如此可以定义一个Map:
def map=['name':'john','age':14,'sex':'boy']
添加项:
map=map+['weight':25] //添加john的体重
map.put('hight', 1.27) //添加john的身高
map.father='Keller' //添加john的父亲
可以用两种方式检索值:
println map['father'] //通过key索引下标索引
println map.hight //通过key作为成员名索引
11、闭包(Closure)
闭包是用{符号括起来的代码块,它可以被单独运行或调用,也可以被命名。类似‘匿名类’或内联函数的概念。
闭包中最常见的应用是对集合进行迭代,下面定义了闭包对map进行了迭代:
map.each ({key,value->println "$key:$value"}) //key,value两个参数用于接受每个元素
map.each {println it} //it是一个关键字,代表map集合的每一个元素
除了用于迭代之外,闭包可以单独定义:
def say={word-> println "Hi, $word!"}
调用:
say("groovy")
say.call("groovy & java")
输出:
Hi, groovy!
Hi, groovy & java!
看起来,闭包类似于方法,需要定义参数和要执行的语句,它也可以通过名称被调用。然而闭包对象(不要奇怪,闭包也是对象)可以作为参数传递(比如前面的闭包作为参数传递给map的each方法)。而在java中,要做到这一点并容易(也许c++的函数指针可以,但不要忘记java中没有指针)。其次,闭包也可以不命名(作为代价,不能在定义闭包时执行一次),而方法不可以。
12、类
Groovy类的java类一样,你完全可以用标准java bean的语法定义一个Groovy类。但作为另一种语言,我们可以使用更Groovy的方式定义的使用类,这样的好处是,你可以少写一半以上的javabean代码。
(1)不需public修饰符
如前面所言,Groovy的默认访问修饰符就是public,如果你的Groovy类成员需要public修饰,则你根本不用写它。
(2)不需要类型说明
同样前面也说过,Groovy也不关心变量和方法参数的具体类型。
(3)不需要getter/setter方法
不要奇怪,在很多ide(如eclipse)早就可以为程序员自动产生getter/setter方法了。在Groovy中,则彻底不需要getter/setter方法--所有类成员(如果是默认的public)根本不用通过getter/setter方法引用它们(当然,如果你一定要通过getter/setter方法访问成员属性,Groovy也提供了它们)。
collect[collect.size()]=100.0
Collection使用类似数组下标的方式进行检索:
collect[collect.size()-1]
collect[5]
groovy支持负索引:
println collect[-1] //索引倒数第1个元素
println collect[-2] //索引倒数第2个元素
Collection支持集合运算:
collect=collect+5 //在集合中添加元素5
println collect[-1] //索引倒数第1个元素
collect=collect-"a" //在集合中减去元素a(第1个)
println collect[0] //索引集合中第1个元素(现在是b)
同样地,可以往集合中添加另一个集合或删除一个集合:
collect=collect-collect[0..4] //把集合中的前5个元素去掉
println collect[0] //现在集合中只有1个元素,即原来最后一个
println collect[-1] //也可以用负索引,证明最后一个元素就是第一个元素
(2)Map
Map是“键-值”对的集合,在groovy中,键不一定是String,可以是任何对象(实际上Groovy中的Map就是java.util.LinkedHashMap)。
如此可以定义一个Map:
def map=['name':'john','age':14,'sex':'boy']
添加项:
map=map+['weight':25] //添加john的体重
map.put('hight', 1.27) //添加john的身高
map.father='Keller' //添加john的父亲
可以用两种方式检索值:
println map['father'] //通过key索引下标索引
println map.hight //通过key作为成员名索引
11、闭包(Closure)
闭包是用{符号括起来的代码块,它可以被单独运行或调用,也可以被命名。类似‘匿名类’或内联函数的概念。
闭包中最常见的应用是对集合进行迭代,下面定义了闭包对map进行了迭代:
map.each ({key,value->println "$key:$value"}) //key,value两个参数用于接受每个元素
map.each {println it} //it是一个关键字,代表map集合的每一个元素
除了用于迭代之外,闭包可以单独定义:
def say={word-> println "Hi, $word!"}
调用:
say("groovy")
say.call("groovy & java")
输出:
Hi, groovy!
Hi, groovy & java!
看起来,闭包类似于方法,需要定义参数和要执行的语句,它也可以通过名称被调用。然而闭包对象(不要奇怪,闭包也是对象)可以作为参数传递(比如前面的闭包作为参数传递给map的each方法)。而在java中,要做到这一点并容易(也许c++的函数指针可以,但不要忘记java中没有指针)。其次,闭包也可以不命名(作为代价,不能在定义闭包时执行一次),而方法不可以。
12、类
Groovy类的java类一样,你完全可以用标准java bean的语法定义一个Groovy类。但作为另一种语言,我们可以使用更Groovy的方式定义的使用类,这样的好处是,你可以少写一半以上的javabean代码。
(1)不需public修饰符
如前面所言,Groovy的默认访问修饰符就是public,如果你的Groovy类成员需要public修饰,则你根本不用写它。
(2)不需要类型说明
同样前面也说过,Groovy也不关心变量和方法参数的具体类型。
(3)不需要getter/setter方法
不要奇怪,在很多ide(如eclipse)早就可以为程序员自动产生getter/setter方法了。在Groovy中,则彻底不需要getter/setter方法--所有类成员(如果是默认的public)根本不用通过getter/setter方法引用它们(当然,如果你一定要通过getter/setter方法访问成员属性,Groovy也提供了它们)。
更多精彩
赞助商链接