Groovy 特殊语法
首先申明下,本文为笔者学习《Groovy 程序设计》的笔记,并加入笔者自己的理解和归纳总结。
1、多赋值
(1) Groovy可以返回一个数组,然后赋值给左侧表达式。左侧表达式必须以逗号分隔,放在圆括号中。- def splitName(fullname) {
- fullname.split(',')
- }
- (firstName, lastName) = splitName("Michael,Jordan")
- print "$lastName, $firstName" // Jordan, Michael
交换两个变量的值。
- name1="Michael"
- name2="James"
- (name1, name2) = [name2, name1]
- println "$name1, $name2" // James, Michael
- (name1, name2, name3) = ["Michael", "James", "Kavin", "Steven"]
- println "$name1, $name2, $name3" // Michael, James, Kavin
- (name1, name2, name3) = ["Michael", "James"]
- println "$name1, $name2, $name3" // Michael, James, null
2、相等操作
(1) Groovy将==映射到equals方法,而is方法映射到==方法。- 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
- class A {
- boolean equals(other) {
- println "equals called"
- true
- }
- }
- new A() == new A()
equals called
(2) 如果实现了Comparable接口,==会被映射到该类的compareTo()方法。
- class A implements Comparable {
- boolean equals(other) {
- println "equals called"
- true
- }
- int compareTo(other) {
- println "compareTo called"
- return 1
- }
- }
- new A() == new A()
compareTo called
3、可选形参
Groovy中方法和构造器的形参是可选的。(1) 设置默认参数。
- 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%
- def log(msg, String[] details) {
- println "$msg - ${details}"
- }
- log "msg" // msg - []
- log "msg", "detail1" // msg - [detail1]
- log "msg", "detail1", "detail2" // msg - [detail1, detail2]
- 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、安全导航操作符
安全导航操作符(?.)可以检查引用是否为空- def upperCase(str) {
- str?.toUpperCase()
- }
- println upperCase("hello world!") // HELLO WORLD!
- println upperCase(null) // null
5、文件File
Groovy中是File类来处理文件,大大简化了操作。- new File(fileName).text // 直接得到文件内容
- new File(fileName).eachLine {
- println it
- }
- println new File(fileName).filterLine {
- it =~ /File/
- }