Groovy 特殊语法

Groovy 特殊语法

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

1、多赋值

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

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

2、相等操作

(1) Groovy将==映射到equals方法,而is方法映射到==方法。
  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

  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()方法。

  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) 设置默认参数。
  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) 使用数组实现可变长度的参数。
  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) 使用省略号(...)来传递可变长度的参数。
  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、安全导航操作符

安全导航操作符(?.)可以检查引用是否为空
  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类来处理文件,大大简化了操作。
  1. new File(fileName).text // 直接得到文件内容  
如果想要逐行处理,调用eachLine、filterLine等方法。
  1. new File(fileName).eachLine {  
  2.     println it  
  3. }  
  4. println new File(fileName).filterLine {  
  5.     it =~ /File/  
  6. }  
File还提供了很多withXX方法来处理文件的输入输出。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值