Groovy 特殊语法

xiaoxiao2021-02-28  110

Groovy 特殊语法

首先申明下,本文为笔者学习《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, null  

2、相等操作

(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 called

3、可选形参

Groovy中方法和构造器的形参是可选的。 (1) 设置默认参数。 [java] view plain copy def percent(x, max=100.0) {      x/max*100 + "%"  }    println percent(23// 23.00%  println percent(47100// 47.00%  println percent(311000// 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方法来处理文件的输入输出。
转载请注明原文地址: https://www.6miu.com/read-58306.html

最新回复(0)