Kotlin流程控制

if表达式、when表达式、for循环和while循环

Kotlin基本语法中,已经介绍了if表达式、when表达式、for循环和while循环,可以到该博客中查看。

Break和Continue在循环中的使用

Kotlin也是支持break和continue关键字的。

返回和跳转

Kotlin有三种跳转表达式:
- return。默认跳出最近的一个封闭函数或匿名函数
- break。结束最靠近的循环
- continue 继续执行循环的下一次操作

所有这些表达式都可以用作更大表达式的一部分:

val s=person.name?:return

这些表达式的类型是Nothing类型。

Break和Continue标签

Kotlin中的任何表达式都可以标记一个标签。标签具有标识符的形式,它的后面跟@符号,例如:abc@,fooBar@是有效标签。要是用标注表达式,只是在其前面放上一个标签。
比如:

loop@ for (i in 1..100) {
        for (j in 1..100) {
            if (i + j == 180)
                break@loop
        }

    }

标记break为标记跳转到执行点后。标记继续进行到该循环的下一次迭代。
需要注意的是”break”和”@loop”之间没有空格。

在标签上返回

使用函数文字,局部函数和对象表达式,函数可以嵌套在Kotlin中。修饰return允许从外部函数返回。最重要的用例是从lambda表达式返回。如下代码示例:

fun foo() {
    val ints = listOf(1, 2, 0, 3)
    ints.forEach {
        if (it == 0)
            return
        println(it)
    }
    println("end")

}

其输出结果为:

1
2

返回表达式从最近的包围函数返回,即foo。如果需要从lambda表达式返回,必须对它进行标注并限定返回值:

fun foo_1() {
    val ints = listOf(1, 2, 0, 3)
    ints.forEach lit@ {
        if (it == 0)
            return@lit
        println(it)
    }
    println("end")
}

其输出结果为:

1
2
3
end

现在,它只从lambda表达式返回。通常使用隐性标签更为方便:这样的标签与传递lambda的函数具有相同的名称。

fun foo_2() {
    val ints = listOf(1, 2, 0, 3)
    ints.forEach {
        if (it == 0)
            return@forEach
        println(it)
    }
}

或者,可以用匿名函数替换lambda表达式。异常函数中的返回语句将从匿名函数中返回。

fun foo_3() {
    val ints = listOf(1, 2, 0, 3)
    ints.forEach(fun(value: Int) {
        if (value == 0)
            return
        println(value)
    })
    println("end")
}

当返回值时,解析器优先考虑标签的返回值,即

return@a 1

表示”在标签@a出返回1”,而不是”返回标记的表达式(@a 1)”

备注

关于源码可以前往Github地址

猜你喜欢

转载自blog.csdn.net/qq_19431333/article/details/75208315