当前位置: 代码迷 >> 综合 >> 通过 Groovy 进行循环
  详细解决方案

通过 Groovy 进行循环

热度:29   发布时间:2024-01-10 17:47:14.0

同大多数脚本语言一样,Groovy 经常被宣传为生产力更高 的 Java 语言替代品。您已经看到了 Groovy 缺少类型能够如何减少打字工作。在这一节,将创建并试用一个 repeat 函数。在这个过程中,将进一步探索 Groovy 提高效率的方式。

更好、更短的循环

下面这种方法可以更好地感受 Groovy 缺乏类型的好处:首先,用与创建 HelloWorld 相同的方式创建一个 Groovy 类,将这个类称为 MethodMadness,并删除自动生成的类体:将要定义一个独立的 repeat 函数。现在在控制台中输入以下代码:

def repeat(val){
      
for(i = 0; i < 5; i++){
println val
}
}

起初,从 Java 的角度来看,这个小函数看起来可能有些怪(实际上,它很像 JavaScript)。但它就是 Java 代码,只不过是用 Groovy 的样式编写的。

深入方法

repeat 函数接受一个变量 val。请注意参数不需要 def。方法体本质上就是一个 for 循环。

调用这个函数。

repeat("hello
world")

会输出 “hello world” 五次。请注意,for 循环中省略了 int。没有变量类型的 for 循环要比标准的 Java 代码短些。现在看看如果在代码里加入范围会出现什么情况。








Groovy 中的范围

范围 是一系列的值。例如 “0..4” 表明包含 整数 0、1、2、3、4。Groovy 还支持排除范围,“0..<4” 表示 0、1、2、3。还可以创建字符范围:“a..e” 相当于 a、b、c、d、e。“a..<e” 包括小于 e 的所有值。

循环范围

范围为循环带来了很大的方便。例如,前面从 0 递增到 4 的 for 循环如下所示:

for(i = 0; i < 5; i++)

范围可以将这个 for 循环变得更简洁,更易阅读:

def repeat(val){
      
for(i in 0..5){
println val
}
}

设置范围

如果运行这个示例,可能会注意到一个小问题:“Hello World” 输出了六次而不是五次。这个问题有三种解决方法:

  • 将包含的范围限制到 4:
    for(i in 0..4)



  • 从 1 而不是 0 开始:
    def repeat(val){
            
    for(i in 1..5){
    println val
    }
    }



  • 将范围由包含改为排除:
    def repeat(val){
            
    for(i in 0..<5){
    println val
    }
    }

不论采用哪种方法,都会得到原来的效果 — 输出 “Hello World” 五次。








默认参数值

现在已经成功地使用 Groovy 的范围表达式缩短了 repeat 函数。但这个函数依然有些限制。如果想重复 “Hello World” 八次该怎么办?如果想对不同的值重复不同次数 — 比如 “Hello World” 重复八次,“Goodbye Sunshine” 重复两次,这时该怎么办?

每次调用 repeat 时都要指定需要的重复次数的做法已经过时了,特别是在已经适应了默认行为(重复五次)的时候。

Groovy 支持默认参数值,可以在函数或方法的正式定义中指定参数的默认值。调用函数的程序可以选择省略参数,使用默认值。

更加复杂的参数值

使用前面的 repeat 函数时,如果希望调用程序能够指定重复值,可以像下面这样编码:

def repeat(val, repeat=5){
      
for(i in 0..<repeat){
println val
}
}

像下面这样调用该函数:

repeat("Hello World", 2)
repeat("Goodbye sunshine", 4)
repeat("foo")

结果会输出 “Hello World” 两次,“Goodbye sunshine” 四次,“foo” 五次(默认次数)。