Kotlin学习之-4.3.4 返回和中止循环
来源:互联网 发布:淘宝产品被管控下架 编辑:程序博客网 时间:2024/06/05 10:37
Kotlin学习之-4.3.4 返回和中止循环
Kotlin 有3中结构化的跳转语句:
- return,默认是从最近的函数或者匿名函数中中返回。
- break,中止最近的循环
- continue,从当前的循环中继续执行下一次循环
所有这些表达式都可以被用来组成更大的表达式
val s = person.name ?: return
基于标签的break 和continue
Kotlin中的任何表达式都可以被 标记成一个标签label
,标签由一个标识符和紧跟的@
组成,例如:abc@
, fooBar@
是合法的标签命名。 想要把一个表达式定义成标签,只要在它签名写一个标签即可。
loop@ for (i in 1..100) { //...}
现在我们可以针对这个标签来使用break
和continue
:
loop@ for (i in 1..100) { for (j in 1..100) { if (...) break@loop }}
一个带标签的break
语句,会把执行点跳转到标签标记的位置之后。 一个带标签continue
语句,会还执行循环的下一轮遍历。
在标签位置返回
Kotlin支持的函数语法可以让本地函数,对象表达式和函数可以内嵌在一起。带有标签的return
语句可以让我们从一个外层的函数中返回。 最终要的用例就是从一个lambda表达式中返回。例如:
fun foo() { ints.forEach { if (it == 0) return print(it) }}
这个return
语句会从最近的函数中返回,也就是会从foo()
函数中返回。(注意这种非局部的返回只是在lambda表达式中支持传递给内联函数)。如果我们需要从一个lambda表达式中返回,我们只能先标记它,然后使用带标签的返回语句。
fun foo() { ints.forEach lit@ { if (it == 0) reutrn@lit print(it) }}
现在它只是从lambda表达式中返回。还有时候,使用隐式标签会更加方便:隐式标签的名字和调用这个lambda表达式的函数名是一样的。
fun foo() { val intArray2 = intArrayOf(1, 2, 3) // will print 13 skip 2 intArray2.forEach { if (it == 2) return@forEach print(it) }}
或者还可以把lambda表达式替换成给一个匿名函数。一个返回语句在一个匿名函数中会从匿名函数中返回。
fun foo() { ints.forEach(fun(value: Int) { if (value == 0) return print(value) })}
如果需要返回值,解析器需要一个参数,例如:
return@a 1
意味着在@a这个位置返回1, 而不是返回一个标签表达式(@a 1)
阅读全文
1 0
- Kotlin学习之-4.3.4 返回和中止循环
- Kotlin 官方学习教程之返回和跳转
- Kotlin学习笔记2-4 基础-返回和跳出
- 【3】Kotlin学习之循环以及kotlin中的三元运算
- Kotlin 学习之返回与跳转
- Kotlin学习(7):返回和跳转
- Kotlin 从学习到 Android 第五章 返回和跳转
- 【Kotlin从入门到深坑】之返回和跳转
- Kotlin学习之object表达式和声明
- Kotlin学习之-5.1 类和继承
- Kotlin学习之-5.2 属性和成员
- Kotlin 学习之包和导入
- Kotlin 学习之属性和字段
- Kotlin-1.4-返回和跳转
- Kotlin学习之-4.3 基础类型
- Kotlin学习之-4.3.2 包管理
- Kotlin学习之-4.3.3 控制流
- kotlin 学习之 HelloWorld
- js中的同步和异步的个人理解
- VS2013 只生成DLL,未生成LIB解决办法
- Linux--RH254---unit 10 firewalld
- spring mvc 使用 @ControllerAdvice 捕获404异常
- 生成器模式
- Kotlin学习之-4.3.4 返回和中止循环
- 6、7、8
- 从高考到程序员
- Latex texstudio+ctex中文解决方案
- 屏幕后处理
- web项目一般结构
- myBatis的mapper映射文件之批量处理
- PHP spvoice
- K&R《C程序设计语言》p17:求m的n次方