Kotlin 官方学习教程之返回和跳转
2017-05-27 12:04
260 查看
Kotlin 有三个结构跳转表达式:
return 默认从最近的封闭函数或匿名函数返回
break 终止最近的封闭循环
前往最近的封闭循环的下一步
所有这些表达式都可以用作更大表达式的一部分:
现在我们可以用标签实现 break 或者 continue 的快速跳转:
break 是跳转标签后面的表达式,continue 是跳转到循环的下一次迭代。
return 表达式返回到最近的闭合函数,比如 foo (请注意,这种非本地返回仅适用于传递给内联函数的 lambda 表达式)。如果我们需要从 lambda 表达式返回,我们必须对它进行标注并限定返回值:
现在,它仅仅从 lambda 表达式返回。通常,使用 implicits 标签更方便:这样的标签与传递 lambda 的函数具有相同的名称。
另外,我们可以使用匿名函数来代替 lambda 表达式。
当返回值时,解析器优先考虑符合的返回值,即:
表示 “在标签 @a 返回 1 ” 而不是返回一个标签表达式 (@a 1)
return 默认从最近的封闭函数或匿名函数返回
break 终止最近的封闭循环
前往最近的封闭循环的下一步
所有这些表达式都可以用作更大表达式的一部分:
val s = person.name ?: return
Break 和 Continue 标签
在 Kotlin 中表达式可以添加标签。标签通过 @ 结尾来表示,比如: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) return@lit print(it) } }
现在,它仅仅从 lambda 表达式返回。通常,使用 implicits 标签更方便:这样的标签与传递 lambda 的函数具有相同的名称。
fun foo() { ints.forEach { if (it == 0) 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)
相关文章推荐
- kotlin 官方学习教程之编码风格
- Kotlin 官方学习教程之类和继承
- kotlin 官方学习教程之基本类型
- Kotlin学习(六): 包、控制流、返回与跳转
- Kotlin 官方学习教程之控制流
- Kotlin 官方学习教程之密封类与泛型
- Kotlin 官方学习教程之属性和字段
- kotlin 官方学习教程之基础语法详解
- 学习kotlin第六天_包、控制流、返回和跳转
- Kotlin 官方学习教程之可见性修饰符
- Kotlin 官方学习教程之扩展
- Kotlin 学习笔记(五)—— Kotlin基础之控制流、返回与跳转、 包与导入
- Kotlin 从学习到 Android 第五章 返回和跳转
- Kotlin 官方学习教程之接口
- kotlin 官方学习教程之包
- kotlin 官方学习教程之语法
- kotlin 官方学习教程之基础语法
- Kotlin 学习之返回与跳转
- Swift教程_通过改造官方Sample学习Swift(八)_swift重写Sample(添加View的动画效果、添加View的阴影)
- Swift教程_通过改造官方Sample学习Swift(一)_Element示例简介