为Java开发者解读Groovy编程风格和语言特性(3)

来源:开源中国社区 作者:oschina
  9 asserts2 =="i's value is: 4"// 延迟计算,使用最新的变量值

在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:


时间:2013-01-17 09:10 来源:开源中国社区 作者:oschina 原文链接

好文,顶一下
(0)
0%
文章真差,踩一下
(0)
0%
------分隔线----------------------------


把开源带在你的身边-精美linux小纪念品
无觅相关文章插件,快速提升流量