通过 Groovy 进行循环
同大多数脚本语言一样,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” 五次(默认次数)。
相关推荐
适合想了解groovy 编程开发的人员 Groovy - hellworld Groovy - 变量 Groovy - 静态import Groovy - 字符串 Groovy - 分支结构语句 Groovy - 循环结构语句
它是为学习Groovy的任何人而设计的,他们希望能够查找如何定义类,执行循环等。它在任何Groovy培训课程中都是非常有用的。 要构建指南,只需运行./gradlew它将运行asciidoctor任务并在build / asciidoc / html5中...
在项目的根目录下创建一个sonar-project.properties文件从项目根目录运行sonar-scanner命令单击分析结尾处提供的链接,以在SonarQube UI中浏览项目的质量笔记CodeNarc :可以通过设置sonar.groovy.codenarc.repor
这是该死的简单REPL(读取,评估,打印,循环)外壳,用于评估groovy代码。 groovy-shell-server是应用程序中功能齐全的groovy shell。 您需要多少次只需要在应用程序内调用某个方法,而唯一的方法是JMX或自定义...
Google App Engine上的Groovy脚本编辑器最终执行器此App Engine应用程序允许在Google App Engine上编写和执行任意... 允许通过未索引属性搜索实体(使用循环) 允许处理Google Cloud Storage上的文件多得多...屏幕截图
分配的目的不是根据以下规则正确解决它,而是展示程序员理解基本的、必要的工具,例如if -/ else语句和循环。 FizzBuzz的规则如下: 对于数字 1 到 100, 如果这个数字能被 3 整除打印 Fizz 如果数字可以被 ...
循环,语义内容创作 这项工作得到了“InnoProfile-Corporate Semantic Web”项目的部分支持,该项目由德国联邦教育和研究部 (BMBF) 和 BMBF 新德国创业区创新计划资助。 柏林自由大学 版权所有 (c) 2007-2015 ...
此处提供的代码是一个简化示例,显示了通过使用集合闭包的简单循环和过滤发现的问题之一。 如果您有关于如何提高Groovy性能的建议,请向我发送拉取请求,我很乐意将其放在分支上进行并排比较。 我们的团队正在考虑...
4.4.4 循环总是不好的吗 4.5 结合点、模块和SOLID 4.6 管理复杂性 4.7 模块化的益处 4.8 结论 4.9 参考文献 第5章 实现重用 5.1 可用重用悖论 5.2 关于重用的免责声明 5.2.1 粒度 5.2.2 重量级 5.3 重用...
4.4.4 循环总是不好的吗 4.5 结合点、模块和SOLID 4.6 管理复杂性 4.7 模块化的益处 4.8 结论 4.9 参考文献 第5章 实现重用 5.1 可用重用悖论 5.2 关于重用的免责声明 5.2.1 粒度 5.2.2 重量级 5.3 重用还是可用 ...
IDEA插件,Sonar是一个用于代码质量管理的开源平台,用于管理源代码的质量 通过插件形式,可以支持包括java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groovy等等二十几种编程语言的代码质量管理与检测 Sonar可以从以下七个...
Sonar简介 Sonar是一个用于代码... 通过sonar可以找出循环,展示包与包、类与类之间的相互依赖关系 可以检测自定义的架构规则 通过sonar可以管理第三方的jar包 可以利用LCOM4检测单个任务规则的应用情况 检测耦合
Sonar简介 Sonar是一个用于代码... 通过sonar可以找出循环,展示包与包、类与类之间的相互依赖关系 可以检测自定义的架构规则 通过sonar可以管理第三方的jar包 可以利用LCOM4检测单个任务规则的应用情况 检测耦合
QLExpress基本语法 一、背景介绍 由阿里的电商业务规则、表达式(布尔组合)、特殊数学...4、安全控制,可以通过设置相关运行参数,预防死循环、高危系统api调用等情况。 5、代码精简,依赖最小,250k的jar包适合所有
1.x行上的项目不会进行进一步的开发,错误修复,文档更改,PR,发行或维护。 鼓励用户迁移到 ,这是当前唯一受管理的官方RxJava版本。 RxJava是的Java VM实现:这是一个通过使用可观察的序列组成异步和基于事件的...
Java Lambda 编程 将行为表示为对象 传递、返回 迭代风格循环 更好的迭代风格循环 功能风格循环 功能接口 示例 流 JDK 方法中的新型迭代器实现 非终端中间操作 终端延迟评估 流方法 - 非终端和终端 Filter、Map、...
下面的示例说明如何定义一个Groovy脚本,该脚本将在端口8080上设置一个HTTP端点,该端点通过JSON和XML响应循环: @Grab ( group = ' nz.ac.auckland.stubble ' , module = ' stubble ' , version = ' 1.0.0 ' ) ...
以下是本框架的特色:支持多种元素选择策略(优先级,循环,区域)支持多种( , )支持包括: , , ,等格式的输出支持数据源,URL,元素定位信息的参数化支持密文数据,javascript,groovy,freemarker等动态脚本...
卡塔隆
7、支持复杂的消息转换过滤功能:支持使用 Groovy 脚本在服务端进行消息内容的转化和过滤,能做大大地减少客户端和服务器的数据传输,同时减少客户端的处理消息的负载。 8、提供了一个易用性高的 Web 用户控制台,...