Kotlin:返回和跳转其实还可以添加标签
2017-09-10 本文已影响12人
1024工场
一、返回和跳转
- Kotlin有三种结构跳转表达式:
- return:默认从最直接包围它的函数或者匿名函数返回;
- break:终止最直接包含它的循环;
- continue:继续下一次直接包围它的循环;
- 所有这些表达式都可以用作更大表达式的一部分:
//2.return表达式作为返回值,类型为Noting类型
val s = person.name ?: return
二、Break和Continu标签
- 在Kotlin中,任何表达式都可以用标签(label)来标记,标签格式位标识符后跟@;
- 为一个表达式添加标签,只要在其前面加标签即可;
- 可以使用标签限制break或者continue,break跳转到标签指定的循环后面的执行点,continue继续标签指定的循环的下一次迭代;
//1,2.为for循环添加标签loop@
loop@ for (i in 1..100) {
// ……
}
//3.break跳转到@loop标签指定的循环后面的执行点
loop@ for (i in 1..100) {
for (j in 1..100) {
if (……) break@loop
}
}
三、标签处返回
- 标签限制的return允许从外层函数返回;
- 通常情况下使用隐士标签更方便,该标签和接受lambda的函数同名;
- 可使用匿名函数替代lambda表达式,匿名函数内部return语句将从匿名函数本身返回;
- 解析器优先选用标签限制的return;
//1.return原本从直接包围它的函数foo返回,由于添加了@lit标签则它会从lambda表达式返回
fun foo() {
ints.forEach lit@ {
if (it == 0) return@lit
print(it)
}
}
//2.forEach为隐士标签,和forEach函数同名
fun foo() {
ints.forEach {
if (it == 0) return@forEach
print(it)
}
}
//3.匿名函数fun(value:Int)替代lambda表达式,return从该匿名函数返回
fun foo() {
ints.forEach(fun(value: Int) {
if (value == 0) return
print(value)
})
}
//4.从标签@a返回1
return@a 1
1.新技术,新未来!尽在1024工场。时刻关注最前沿技术资讯,发布最棒技术博文!(甭客气!尽情的扫描或者长按!)
2.加入“Kotlin开发”QQ讨论群,一起学习一起Hi。(甭客气!尽情的扫描或者长按!)
Kotlin开发群