流程控制:返回和跳转
2017-05-27 16:15
169 查看
和 Java 相同,Kotlin 中有三个用来跳转的关键字:return、break 和 continue。它们的基本用法与 Java 一致:return:返回函数的值或终止函数函数运行;
break:终止循环;
continue:跳转到下一次循环。
与 Java 相同,它们跳转的对象都是最直接包围它们的函数或循环。我们重点看一下 Kotlin 中强化版的 标签:Kotlin 中的标签可以用在任何表达式前,格式如下:
break:终止循环;
continue:跳转到下一次循环。
与 Java 相同,它们跳转的对象都是最直接包围它们的函数或循环。我们重点看一下 Kotlin 中强化版的 标签:Kotlin 中的标签可以用在任何表达式前,格式如下:
标签名@ 表达式 //标签名为合法的标识符,与变量名和函数名格式相同在循环中使用标签,可以指定跳转的位置:
loop@ for (i in 1..10) { for (j in 1..10) { if(...) break@loop //终止 i 循环 }}如果我们不使用 loop 标签,break 将会终止 j 的循环;这里 Kotlin 中的标签还只是与 Java 中的标签一样,起到控制流程的作用,但 Kotlin 标签的强大之处在于它还可以控制 return 的返回对象。首先看一个例子:
fun main(args: Array<String>){ val ints = intArrayOf(1, 2, 3) ints.forEach { if (it == 2) return println(it) }}它的输出结果是 1。首先解释一下 forEach() 这个函数,它是 _Arrays.kt 文件中定义的扩展函数,所有数组都扩展了这个函数:
public inline fun <T> Array<out T>.forEach(action: (T) -> Unit): Unit { for (element in this) action(element)}可以看到,它接收一个没有返回值的函数,并使用 for 循环遍历数组中的每个元素,对每个元素执行传入函数的操作。上面的例子里,我们使用 forEach() 函数遍历 ints 数组中的元素,对于每个元素,我们检查它是否等于 2,如果等于 2 则跳过,不等于 2 则打印这个元素。但是 return 只会跳出一个显式定义的函数,不会跳出 lambda 表达式,所以这里的 return 会直接跳出 main() 函数,结束进程,后面的 3 没有遍历到。如果我们想跳出 lambda 表达式,可以用标签标记这个 lambda 表达式,然后让 return 返回到这个标签处:
ints.forEach lit@{ if(it == 2) return@lit println(it)}这样,程序运行到 it = 2 时,会直接返回到 lit 标签标记的函数开始处,继续下一次遍历,输出 1 和 3 。Kotlin 为了简化程序,会给每个高阶函数添加一个 隐式标签,这个标签与函数同名,上面的程序可以写为:
ints.forEach { if(it == 2) return@forEach println(it)}此外,如果 return 后有返回值,再加标签就要写成 return@标签 返回值 的形式:
return@loop 1 // 返回值 1 到 loop 标记的函数处
相关文章推荐
- 【慕课笔记】第四章 流程控制语句 第9节 JAVA循环跳转语句之break
- C语言的流程控制(第三篇章:四大跳转)
- C#中的主要流程控制语句之跳转语句
- 【慕课笔记】第四章 流程控制语句 第10节 JAVA循环跳转语句之continue
- [Kotlin]Kotlin学习笔记(二):Kotlin中流程控制语句的学习(条件、跳转、循环)
- JAVA基础再回首(二)——流程控制语句、跳转控制语句
- 使用pushState实现微信“返回”按钮控制单页应用页面的无刷新跳转
- 多Activity时的跳转流程控制
- vb.net 教程 2-8 流程控制:跳转语句GOTO
- java基础(二)----流程控制语句跳转控制语句
- C#中常用流程控制语句、跳转语句示例及汇总
- FreeSwitch通过远程接口返回IVR控制流程
- 黑马程序员————流程控制语句——跳转语句
- 黑马程序员---Java基础篇之流程控制语句及控制跳转语句
- android跳转流程控制
- IOS 框架页面跳转、Appdelegate.m控制返回rootVC
- JavaScript复习之--JavaScript控制流程-跳转语句,with语句
- 【C#】流程控制语句—跳转语句
- 黑马程序员----C#中的流程控制语句之跳转语句
- laravel5.0 view层页面之间的跳转流程[通过route路由控制]