Groovy Tip 27 Groovy语言对一些常用操作符的扩展
???????? Groovy Tip 27 Groovy语言对一些常用操作符的扩展
?
?
Groovy语言为了编码的快捷,除了引入了一些Java语言所没有的操作符,还大量的对Java语言在使用的操作符进行了功能上的扩展,使得这些操作符在操作便捷性上得到更好的扩展,使用范围更加广泛。 比如,在Java语言中,有如下代码: ?????? ?????? int i = 0; ?????? String str = "a"; ?????? ?????? if(str.equals("a")) i = 1; ?????? else i = 0; ?????? ?????? System.out.println(i);
?
?
对于上面的代码,在Java语言中,可以用如下的赋值语句代替: ?????? ?????? String str = "a"; ?????? ?????? int i = str.equals("a")?1:0; ?????? ?????? System.out.println(i);
?
在Groovy语言,当然仍然可以使用上面的赋值语句。如下:
?
?????? def type = 'a' ?????? ?????? def result = type=='a'?1:0 ????????????? ?????? println result ???
?
但对于如下的代码: ?????? ?????? int i = 0; ?????? ?????? String str = "a"; ?????? ?????? if(str.equals("a")) i = 1; ?????? else if(str.equals("b")) i = 2; ?????? else if(str.equals("c")) i = 3; ?????? else i = 0; ?????? ??? System.out.println(i);
?
在Java语言中,上面的赋值语句就不能使用了,顶多可以使用switch语句,但switch语句并不能减轻多少代码量。 而在Groovy语言中,却仍然可以使用上面的语句,代码如下:
?
?????? def type = 'd' ?????? ?????? def result = type=='a'?1:type=='b'?2:type=='c'?3:0 ????????????? ?????? println result
?
?
看到上面的语句,我们就可以想起pl-sql里面的赋值语句,都是一样的美妙。
?
在Java语言中,通过数组的下标取值是我们常用的一种取值方法,示例代码如下: ?????? ?????? String[] strs = new String[]{"a","b","c"}; ?????? ?????? System.out.println(strs[2]);
?
但是,在Java语言中,我们只能对数组使用下标取值;而在Groovy语言中,绝大多数的集合类型,如数组、List、String、StringBuffer等,都可以通过使用下标来取值,示例代码如下:
?
?????? def arr = [1,2,3,4] as int[]
?
?????? println arr[2]
?
?
?????? def list = ['a','b','c','d']
?
?????? println list[3]
?
?????? def str = 'hello' ?????? ?????? println str[1]
?
?????? def sb = new StringBuffer()
?
?????? sb<<'a'<<'b'<<'c'<<'d' ?????? ?????? println sb[0]
?
???
?
这已经是相当让人兴奋的了,但Groovy语言还没有停止脚步,依然对通过下标的取值操作做了进一步的扩展。 比如,对于如下的Java代码:
?
?????? String[] strs = new String[]{"a","c"}; ??? 如果我们要获取倒数第二个元素,在Java语言中,需要做如下的编码: ?????? ?????? System.out.println(strs[strs.length-2]);
?
但是,在Groovy语言中,只需如下编码:
?
?????? def list = ['a','d']
?
?????? println list[-2]
?
在Groovy语言中,负数下标表示从集合后面开始数,“-1”是倒数第一个元素,“-2”是倒数第二个元素,等等,如此类推。
?
在Java语言中,运算符“+=”通常被用来做算术运算,如下面所示的例子: int i = 0; ?????? ?????? i += 4; ?????? ??? System.out.println(i);
?
在Groovy语言中,如您所料,它的使用范围也被大大的扩大了,以至于可以使用于除了算术运算以外,还有,数组、List、字符串、StringBuilder和StringBuffer等一些数据类型的运算中,请看下面的例子: ??? ? ??? ? def list = [1,3] ??? ? ??? ? list += 4 ??? ? ??? ? println list ??? ? ??? ? def str = 'abc' ??? ? ??? ? str += 'd' ??? ? ??? ? println str ??? ? ??? ? def sb = new StringBuilder() ??? ? ??? ? sb += 'a' ??? ? ??? ? println sb.toString() ??? ? ??? ? def sb1 = new StringBuffer() ??? ? ??? ? sb1 += 'b' ??? ? ??? ? println sb1.toString() ?
?
上面代码的运行结果为: [1,2,3,4] abcd a b
?
?
看到了上面的运行结果,如您所能想到的那样,运算符“+=”在上面的一些数据类型中的作用大致相当于运算符“<<”。至于用哪个方便,我的感觉都差不多,可能有人会习惯使用“+=”一些。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |