Kotlin 从学习到 Android 第五章 返回和跳转

来源:互联网 发布:路由器网络延迟不稳定 编辑:程序博客网 时间:2024/06/16 02:23

在 Kotlin 中,有三种返回和跳转语句:

  • return 从最近的一个封闭函数或匿名函数中返回;
  • break 跳出最近的封闭循环;
  • continue 继续执行最近封闭循环的下一步;

上面这三个表达式也能够作为其他表达式的一部分:

val s = person.name ?: return

break 和 continue 标签

在 Kotlin 中任何表达式都可以使用标签,标签的格式为:标签名@,例如,abc@ 、m@ 等。使用标签时,我们只需把标签放在表达式前面即可,一般和表达式有一个空格的距离:

// 再 i = 10 时跳出整个循环loop@ for (i in 1..100) {    for (j in 1..10) {        if (i == 10) break@loop else println("$i : $j")    }}

使用标签的 return

一般情况下,Kotlin 中的 return 和 java 中的 return 效果一样,都是结束最近的封闭函数:

var ints = arrayListOf<Int>(0 ,1 ,2, 3)fun foo() {// 并不会打印出任何值    ints.forEach {        if (it == 0) return        print(it)    }} 

但是,当 return 后面跟上标签时,表示符合判断条件后终止标签所标记的表达式,类似于 break 的作用:

var ints = arrayListOf<Int>(0 ,1 ,2, 3)fun foo() {    ints.forEach lit@ {        if (it == 0) return@lit        print(it)    }}

lit@ 是后面表达式的标签,当 it == 0 时,终止表达式 {…} ,ints.forEach 继续执行,所以打印结果是 123

然而,更多情况下我们使用匿名标签,其标签名和 lambda 表达式中函数的名称一样:

fun foo() {    ints.forEach {        if (it == 0) return@forEach        print(it)    }}

或者,我们也可以使用一个匿名函数来代替 lambda 表达式,这样这个 return 的作用就是终止当前的匿名函数:

fun foo() {    ints.forEach(fun(value: Int) {        if (value == 0) return        print(value)    })}

当需要返回值时,我们可以这么写:

return@a 1

这句话的意思是:表达式 @a 的返回结果是 1 ,而不是返回一个有标记的表达式 (@a 1)。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 怀孕2个月同房了怎么办 怀孕前三月同房了怎么办 人流前三天同房了怎么办 人流后三天同房了怎么办 吃避孕药后月经量少怎么办 排卵日同房不想怀孕怎么办 排卵日同房没有怀孕怎么办 想怀孕想生儿子怎么办 到期大姨妈不来怎么办 怕怀孕月经不来怎么办 宫颈环扎后宫缩怎么办 来例假刺激外阴高潮了怎么办 客人消费完说没钱怎么办? 孕13周血糖偏高怎么办 餐后血糖高14点怎么办 餐后血糖20多怎么办 空腹血糖6.6饭后9.2怎么办 键盘shift键失效了怎么办 灵异附身夫妻不合怎么办 鞋子买大了半码怎么办 鞋子买小了半码怎么办 黑布鞋鞋面白了怎么办 黑布鞋不黑了怎么办 黑布鞋退白了怎么办 老北京布鞋款式太少怎么办 老人输液抽搐后昏迷怎么办 头七家里有狗怎么办 股票退市股民的钱怎么办 美国股票退市股民怎么办 百度云字幕和视频不同步怎么办 百度云加载字幕有延迟怎么办 很难适应新环境怎么办 蜘蛛丝碰到嘴唇上起包有毒怎么办? 电瓶车在路上爆胎了怎么办 嘴被虫子咬肿了怎么办 高铁管家购票失败怎么办 高铁车厢空调冷怎么办 高铁票过了时间怎么办 网购火车票丢了怎么办 改签没有票了怎么办 火车票取了没赶上车怎么办