首先申明下,本文为笔者学习《Groovy 程序设计》的笔记,并加入笔者自己的理解和归纳总结。
1、多赋值
(1) Groovy可以返回一个数组,然后赋值给左侧表达式。左侧表达式必须以逗号分隔,放在圆括号中。 [java] view plain copy def splitName(fullname) { fullname.split(',') } (firstName, lastName) = splitName("Michael,Jordan") print "$lastName, $firstName" // Jordan, Michael (2) 使用数组来赋值 交换两个变量的值。 [java] view plain copy name1="Michael" name2="James" (name1, name2) = [name2, name1] println "$name1, $name2" // James, Michael 左侧较少时,多余值会被抛弃 [java] view plain copy (name1, name2, name3) = ["Michael", "James", "Kavin", "Steven"] println "$name1, $name2, $name3" // Michael, James, Kavin 左侧较多时,被设置为null [java] view plain copy (name1, name2, name3) = ["Michael", "James"] println "$name1, $name2, $name3" // Michael, James, null2、相等操作
(1) Groovy将==映射到equals方法,而is方法映射到==方法。 [java] view plain copy name1="Michael" name2=new String("Michael") name3=name2 println name1 == name2 println name2 == name3 println name1.is(name2) println name2.is(name3) 返回 true true false true [java] view plain copy class A { boolean equals(other) { println "equals called" true } } new A() == new A() 返回 equals called(2) 如果实现了Comparable接口,==会被映射到该类的compareTo()方法。
[java] view plain copy class A implements Comparable { boolean equals(other) { println "equals called" true } int compareTo(other) { println "compareTo called" return 1 } } new A() == new A() 返回 compareTo called3、可选形参
Groovy中方法和构造器的形参是可选的。 (1) 设置默认参数。 [java] view plain copy def percent(x, max=100.0) { x/max*100 + "%" } println percent(23) // 23.00% println percent(47, 100) // 47.00% println percent(31, 1000) // 3.100% (2) 使用数组实现可变长度的参数。 [java] view plain copy def log(msg, String[] details) { println "$msg - ${details}" } log "msg" // msg - [] log "msg", "detail1" // msg - [detail1] log "msg", "detail1", "detail2" // msg - [detail1, detail2] (3) 使用省略号(...)来传递可变长度的参数。 [java] view plain copy def log(msg, String... details) { println "$msg - ${details}" } log "msg" // msg - [] log "msg", "detail1" // msg - [detail1] log "msg", "detail1", "detail2" // msg - [detail1, detail2] log "msg", ["detail1", "detail2"] as String[] // msg - [detail1, detail2]4、安全导航操作符
安全导航操作符(?.)可以检查引用是否为空 [java] view plain copy def upperCase(str) { str?.toUpperCase() } println upperCase("hello world!") // HELLO WORLD! println upperCase(null) // null 如果不使用(?.),会返回NullPointerException异常。5、文件File
Groovy中是File类来处理文件,大大简化了操作。 [java] view plain copy new File(fileName).text // 直接得到文件内容 如果想要逐行处理,调用eachLine、filterLine等方法。 [java] view plain copy new File(fileName).eachLine { println it } println new File(fileName).filterLine { it =~ /File/ } File还提供了很多withXX方法来处理文件的输入输出。