`
jamie.wang
  • 浏览: 339181 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

groovy简明教程(五)控制结构

    博客分类:
  • Java
阅读更多

7. Groovy的控制结构

要理解groovy的控制结构,首先要明白其布尔值的判定。groovy借鉴了很多脚本语言,把数字0,空字符串,空集合等判定为false,除此之外null对象为false。

7.1 swith语句

groovy的swith语句支持很多类型,如下面的例子,实际上是调用了case条件中对象的isCase()方法,这里列举了以下实现isCase()方法的对象(注释中的是isCase()具体实现),你可以自定义改方法。

 

switch (10) {
    case 0:                println '==0'; break // Integer.equals(10)
    case 0..9:             println '[0,9]'; break // Range.contains(10)
    case [8, 9, 11]:       println 'in [8, 9, 11]'; break // Collections.contains(10)
    case Float:            println 'is Float'; break // 10 instanceof Float
    case { it % 2 == 1 }:  println 'odd'; break // Closure.call(10)
    case ~/\d\s/:          println "match /\\d\\w/"; break // Regular.matcher(10.toString()).matches(), Note: 10.toString() is called
    case '10':             println 'is string 10'; break  // String.equals(10.toString(); Note: 10.toString() called
    default:               println 'nothing'; break
} // output: is string 10

 

 注意:如果没有break,即使case条件为false,后面的println语句也会执行。

另外集合的grep方法也用isCase()方法取交集

7.2 循环

groovy里有for和while循环,没有do-while。

groovy的for可以遍历实现Iterable的类,已知的有:range/collection/map/array/iterator/enumeration。

除此之外,for还可以遍历一个文件的行,正则表达式的匹配项,一个对象,甚至是null(不会报错,当然也不会循环)

file = new File(/H:\programs\grails-2.2.3\INSTALL/)
for (line in file) {
    println line
}

for (n in null) {
    println 'this won\'t happen'
}

for (n in 10) {
    println n // output: 10
}

7.3 break,continue,return

这几个中断代码执行的逻辑和java一样,稍微要注意的是return在闭包中是可以省略的,默认返回最后一个表达式的结果,如果最后一个表达式没返回值,则返回null,另外就是循环中只是本轮循环结束,循环会继续。

7.4 try-catch-finally

异常捕获和java中是相同的。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics