【Groovy】流程控制
1 选择结构
Groovy 中选择结构主要包含 if -else、switch 语句,并且可以返回结果。
1.1 if-else
def score = 85
if (score >= 90) {
println("优秀")
} else if (score >= 80) {
println("良好")
} else if (score >= 60) {
println("及格")
} else {
println("不及格")
}
说明:如果 {} 里只有一条语句,可以省略 {},if-else 语句可以嵌套使用,其他流程控制语句也可以嵌套使用。不同于 Kotlin,Groovy 中 if-else 语句不能作为结果判断,即下面的语句是非法的。
def score = 85
def res = if (score > 60) "及格" else "不及格"
1.2 switch
1)简单案例
def grade = 'B'
switch (grade) {
case 'A':
println("优秀")
break
case 'B':
println("良好")
break
case 'C':
println("及格")
break
default:
println("不及格")
break
}
说明:如果 {} 里只有一条语句,可以省略 {}。不同于 Kotlin,Groovy 中 when 语句不能作为结果判断。
2)多分支合并
def grade = 'B'
switch (grade) {
case 'A':
case 'B':
case 'C':
println("及格")
break
default:
println("不及格")
break
}
2 循环结构
Groovy 中循环结构主要包含 for、while、do-while 循环结构。另外,continue 语句可以控制跳过某次循环,break 语句可以控制跳出循环体。
2.1 for
for 循环可以对任何提供迭代器(iterator)的对象进行遍历。
1)遍历整数范围
for (int i = 1; i < 5; i++) {
println(i) // 打印: 1、2、3、4
}
for (i in 1..<5) {
println(i) // 打印: 1、2、3、4
}
2)遍历数组 / 列表
def items = ["aa", "bb", "cc"]
// def items = ["aa", "bb", "cc"] as String[]
for (item in items) {
println(item) // 打印: aa、bb、cc
}
items.each {
println(it) // 打印: aa、bb、cc
}
for (index in items.indices) {
println("items[$index]=${items[index]}") // 打印: items[0]=aa、items[1]=bb、items[2]=cc
}
items.eachWithIndex { item, index ->
println("items[$index]=$item") // 打印: items[0]=aa、items[1]=bb、items[2]=cc
}
2.2 while
def i = 0
while(i < 5) {
println(i)
i++
}
2.3 do-while
def i = 0
do {
println(i)
i++
} while (i < 5)
2.4 continue
使用 continue 语句,可以跳过循环体中 continue 后面的语句,继续执行下一轮循环。
1)单层循环
for (i in 1..5) {
if (i == 3) continue
println(i) // 打印: 1、2、4、5
}
2)多层循环
label: for (i in 1..3) {
for (j in 4..6) {
if (j == 5) continue label
println("($i,$j)") // 打印: (1,4)、(2,4)、(3,4)
}
}
说明:label 可以修改为任何符合变量命名规范的名字。
2.5 break
使用 break 语句,可以跳出循环体,继续执行循环体后面的语句。
1)单层循环
for (i in 1..5) {
if (i == 3) break
println(i) // 打印: 1、2
}
2)多层循环
label: for (i in 1..3) {
for (j in 4..6) {
if (j == 5) break label
println("($i,$j)") // 打印: (1,4)
}
}
说明:label 可以修改为任何符合变量命名规范的名字。
声明:本文转自【Groovy】流程控制。
【Groovy】流程控制的更多相关文章
- groovy–流程控制
在本篇文章中,我们将介绍逻辑分支,循环,以及如何从if-else以及try-catch代码块中返回值. if – elseGroovy 支持Java传统的if-else语法: def x = fals ...
- 第10章 Shell编程(4)_流程控制
5. 流程控制 5.1 if语句 (1)格式: 格式1 格式2 多分支if if [ 条件判断式 ];then #程序 else #程序 fi if [ 条件判断式 ] then #程序 else # ...
- Shell命令和流程控制
Shell命令和流程控制 在shell脚本中可以使用三类命令: 1)Unix 命令: 虽然在shell脚本中可以使用任意的unix命令,但是还是由一些相对更常用的命令.这些命令通常是用来进行文件和文字 ...
- PHP基础知识之流程控制的替代语法
PHP 提供了一些流程控制的替代语法,包括 if,while,for,foreach 和 switch. 替代语法的基本形式是把左花括号({)换成冒号(:),把右花括号(})分别换成 endif;,e ...
- Python黑帽编程2.4 流程控制
Python黑帽编程2.4 流程控制 本节要介绍的是Python编程中和流程控制有关的关键字和相关内容. 2.4.1 if …..else 先上一段代码: #!/usr/bin/python # - ...
- 使用yield进行异步流程控制
现状 目前我们对异步回调的解决方案有这么几种:回调,deferred/promise和事件触发.回调的方式自不必说,需要硬编码调用,而且有可能会出现复杂的嵌套关系,造成"回调黑洞" ...
- [Java入门笔记] Java语言基础(四):流程控制
流程控制指的是在程序运行的过程中控制程序运行走向的方式.主要分为以下几种: 顺序结构 顺序结构,顾名思义,是指程序从上往下逐步顺序执行.中间没有任何的判断和跳转. 分支结构 Java提供两种分支结构: ...
- node基础13:异步流程控制
1.流程控制 因为在node中大部分的api都是异步的,比如说读取文件,如果采用回调函数的形式,很容易造成地狱回调,代码非常不容易进行维护. 因此,为了解决这个问题,有大神写了async这个中间件.极 ...
- Shell入门教程:流程控制(1)命令的结束状态
在Bash Shell中,流程控制命令有2大类:“条件”.“循环”.属于“条件”的有:if.case:属于“循环”的有:for.while.until:命令 select 既属于“条件”,也属于“循环 ...
- Oracle中PL/SQL的执行部分和各种流程控制
Oracle中PL/SQL的执行部分和异常部分 一.PL/SQL的执行部分. 赋值语句. 赋值语句分两种,一种是定义一个变量,然后接收用户的IO赋值:另一种是通过SQL查询结果赋值. 用户赋值举例: ...
随机推荐
- torch.randn(*tensor_shape, **kwargs)
` randn(*size, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False, pin_ ...
- Management-DecisionMaking-Leadership:{Rational,BoundedRational,Intuitive,EvidenceBasedManagerial,Crowdsourcing} D.M.
Rational VS Intuitive VS EBM VS CS: 例如:当经济不景气时期,亲戚聚会时,面对一落难亲戚, 尽管风传外面有破产负债,但确实没害过亲朋好友做过,怎么决策: Intuit ...
- 学习OSAL并移植到STM32F103开发板上
代码参考出处:https://github.com/mcuwty/osal.git 我在此此基础上做了整理,移植到了stm32f103上:demo链接: https://pan.baidu.com/s ...
- 我的代码出现幻觉?说好的a = 1; x = b,怎么成了x = b; a = 1?
有序性:代码执行的幻觉 前面讲到通过缓存一致性协议,来保障共享变量的可见性.那么是否还有其他情况,导致对共享变量操作不符合预期结果.可以看下面的代码: private int a, b; privat ...
- AI 赋能的云原生应用:技术趋势与实践
AI 赋能的云原生应用:技术趋势与实践 随着人工智能技术的飞速发展,云计算作为基础设施的角色日益重要.AI 与云计算的结合,正在催生新一代的云原生应用,为各行各业带来变革性的力量. 本文将探讨 AI ...
- linux挂载命令mount详解
<<命令格式:mount [-t vfstype] [-o options] device dir >> 1 -t vfstype 指的是挂载的文件系统的类型,通常不用指定 ...
- Android实现两台手机屏幕共享和远程控制
1 屏幕共享功能介绍 屏幕共享是指在视频通话或互动直播过程中将屏幕内容以视频的方式分享给其他的观众,以增强互动体验,提高沟通效率.屏幕共享解决方案提升了用户实时视频通话的沟通效率. 屏幕共享在如下场景 ...
- 即构推出行业首个数据流录制PaaS方案,低成本复刻头部大厂录制能力
在大部分的实时音视频场景下,最重要的是通话稳定性.画面清晰度.弱网抗丢包性能.但在教育场景中,音视频画面并不是首要.甚至有的场景可以不需要音视频画面,但唯独白板是教育场景中必不可少的一环. 白板在教育 ...
- Ubuntu Hexo Github.io 自建博客站
1. 安装node/npm/hexo 在 nodejs 官网下载 Ubuntu的压缩包,解压 tar -zcvf node-v18.18.2-linux-x64.tar.xz 设置全局变量,注意是把他 ...
- Cannot read property 'currentStyle' of null
antv 绘制图表出现 主要原因: 找不到dom节点 具体原因1:绘制图表 id 没有对应起来 vue 中要在dom就绪之后绘制图表 即在 mounted 中