在Java里面,字符串连接是十分的累赘:
1 throw new PluginException("Failed to execute command list-applications:"+
2 " The group with name "+
3 parameterMap.groupname[0] +
4 " is not compatible group of type "+
5 SERVER_TYPE_NAME)
你可以使用 \ 连续字符 (这不等同于多行文本)
1 throw new PluginException("Failed to execute command list-applications: \
2 The group with name ${parameterMap.groupname[0]} \
3 is not compatible group of type ${SERVER_TYPE_NAME}")
或者使用三个双引号实现多行文本:
1 throw new PluginException("""Failed to execute command list-applications:
2 The group with name ${parameterMap.groupname[0]}
3 is not compatible group of type ${SERVER_TYPE_NAME)}""")
另外,你也可以使用.stripIndent()函数实现删除多行文本里面的左侧多余空格。
同时请注意Groovy里面单引号和双引号的区别:单引号通常用来创建Java字符串,不带任何的插值变量,而双引号可以创建Java字符串,也可以用来创建带插值变量的GStrings。
对于多行字符串,你可以使用三个引号:例如在GStrings变量使用三个双引号,在简单的String变量中使用三个单引号。
如果你需要写正则表达式,你必须使用斜杠字符标记:
1 assert"foooo/baaaaar"==~ /fo+\/ba+r/
斜杠标记的好处是,你不需要写两个反斜杠去做转义,让正则表达式更简洁。
最后但并非不重要,请使用单引号去定义字符常量,使用双引号定义需要使用插值函数的字符串。
原生的数据结构语法
Groovy对数据结构提供原生语法,例如列表,映射,正则表达式或者一个范围内的数值。请在你的Groovy程序中好好使用它们。
以下是一些例子是使用那些原生数据结构的:
01 def list = [1,4,6,9]
02
03 // 默认情况下,键是字符的,所以没必要用引号括着它们
04 // 你可以使用with()包含着键,例如使用[(状态变量):状态名],利用变量或对象作为键
05 def map = [CA:'California', MI:'Michigan']
06
07 def range =10..20
08 def pattern = ~/fo*/
09
10 // 等同于 add()
11 list <<5
12
13 // 调用 contains()
14 assert4in list
15 assert5in list
16 assert15in range
17
18 // 下标符号
19 assertlist[1] ==4
20
21 // 增加键值对
22 map << [WA:'Washington']
23 // 下标符号
24 assertmap['CA'] =='California'
25 // 属性
26 assertmap.WA =='Washington'
27
28 // 使用正则表达式匹配字符串
29 assert'foo'=~ pattern
Grovvy 开发工具
我们来继续说说数据结构,当你需要迭代集合,Groovy提供非常丰富的方法,装饰java的核心数据结构,例如each{}, find{}, findAll{}, every{}, collect{}, inject{}.这些方法给编程语言增加了些乐趣,同时帮助我们更轻松的设计复杂的算法。通过装饰器,大量的新方法已应用于java的各种类型,这得得益于语言得的的动态特性。你可以查找更多的使用在字符串,文件,流,集合或者其他的方法:
http://groovy.codehaus.org/groovy-jdk/
switch的力量
Groovy的switch比C语言家族的更强大,因为它们通常只接收基本数据类型和。而Groovy的switch可以接受丰富的数据类型:
01 def x =1.23
02 def result =""
03 switch(x) {
04 case"foo": result ="found foo"
05 // lets fall through
06 case"bar": result +="bar"
07 case[4,5,6,'in List']:
08 result ="list"
09 break
10 case 12..30:
11 result ="range"
12 break
13 case Integer: