Groovy 特殊语法

来源:互联网 发布:java工程师是干什么的 编辑:程序博客网 时间:2024/06/06 13:14

Groovy 特殊语法

首先申明下,本文为笔者学习《Groovy 程序设计》的笔记,并加入笔者自己的理解和归纳总结。

1、多赋值

(1) Groovy可以返回一个数组,然后赋值给左侧表达式。左侧表达式必须以逗号分隔,放在圆括号中。
[java] view plain copy
  1. def splitName(fullname) {  
  2.     fullname.split(',')  
  3. }  
  4.   
  5. (firstName, lastName) = splitName("Michael,Jordan")  
  6. print "$lastName, $firstName" // Jordan, Michael  
(2) 使用数组来赋值
交换两个变量的值。

[java] view plain copy
  1. name1="Michael"  
  2. name2="James"  
  3. (name1, name2) = [name2, name1]  
  4. println "$name1, $name2" // James, Michael  
左侧较少时,多余值会被抛弃
[java] view plain copy
  1. (name1, name2, name3) = ["Michael""James""Kavin""Steven"]  
  2. println "$name1, $name2, $name3" // Michael, James, Kavin  
左侧较多时,被设置为null
[java] view plain copy
  1. (name1, name2, name3) = ["Michael""James"]  
  2. println "$name1, $name2, $name3" // Michael, James, null  

2、相等操作

(1) Groovy将==映射到equals方法,而is方法映射到==方法。
[java] view plain copy
  1. name1="Michael"  
  2. name2=new String("Michael")  
  3. name3=name2  
  4.   
  5. println name1 == name2  
  6. println name2 == name3  
  7. println name1.is(name2)   
  8. println name2.is(name3)  
返回
true
true
false
true

[java] view plain copy
  1. class A {  
  2.     boolean equals(other) {  
  3.         println "equals called"  
  4.         true  
  5.     }  
  6. }  
  7. new A() == new A()  
返回
equals called

(2) 如果实现了Comparable接口,==会被映射到该类的compareTo()方法。

[java] view plain copy
  1. class A implements Comparable {  
  2.     boolean equals(other) {  
  3.         println "equals called"  
  4.         true  
  5.     }  
  6.       
  7.     int compareTo(other) {  
  8.         println "compareTo called"  
  9.         return 1  
  10.     }  
  11. }  
  12. new A() == new A()  
返回
compareTo called

3、可选形参

Groovy中方法和构造器的形参是可选的。
(1) 设置默认参数。
[java] view plain copy
  1. def percent(x, max=100.0) {  
  2.     x/max*100 + "%"  
  3. }  
  4.   
  5. println percent(23// 23.00%  
  6. println percent(47100// 47.00%  
  7. println percent(311000// 3.100%  
(2) 使用数组实现可变长度的参数。
[java] view plain copy
  1. def log(msg, String[] details) {  
  2.     println "$msg - ${details}"  
  3. }  
  4.   
  5. log "msg" // msg - []  
  6. log "msg""detail1" // msg - [detail1]  
  7. log "msg""detail1""detail2" // msg - [detail1, detail2]  
(3) 使用省略号(...)来传递可变长度的参数。
[java] view plain copy
  1. def log(msg, String... details) {  
  2.     println "$msg - ${details}"  
  3. }  
  4. log "msg" // msg - []  
  5. log "msg""detail1" // msg - [detail1]  
  6. log "msg""detail1""detail2" // msg - [detail1, detail2]  
  7. log "msg", ["detail1""detail2"] as String[] // msg - [detail1, detail2]  

4、安全导航操作符

安全导航操作符(?.)可以检查引用是否为空
[java] view plain copy
  1. def upperCase(str) {  
  2.     str?.toUpperCase()  
  3. }  
  4.   
  5. println upperCase("hello world!"// HELLO WORLD!  
  6. println upperCase(null// null  
如果不使用(?.),会返回NullPointerException异常。

5、文件File

Groovy中是File类来处理文件,大大简化了操作。
[java] view plain copy
  1. new File(fileName).text // 直接得到文件内容  
如果想要逐行处理,调用eachLine、filterLine等方法。
[java] view plain copy
  1. new File(fileName).eachLine {  
  2.     println it  
  3. }  
  4. println new File(fileName).filterLine {  
  5.     it =~ /File/  
  6. }  
File还提供了很多withXX方法来处理文件的输入输出。
原创粉丝点击