kotlin中的retrun,break,continue

340 阅读1分钟

由于kotlin中有Lambda,匿名函数的等概念,使得在kotlin中return语句相比其他语言要稍微复杂点,

常见的return和jump,主要包含return,continue,break。

1 return

官方对return的介绍,By default returns from the nearest enclosing function or anonymous function

意思就是return默认从离它最近的闭合函数或匿名函数返回

1.1 常规

fun test(number: Int) {
    if (number == -1) return
    Log.d("TAG","exit test function")
}

上面的例子就是当number==-1,那么test函数就return了,后面的代码就不会被执行了。

1.2 return in lambda

private fun main() {
    listOf(1, 2, 3, 4, 5).forEach {
        if (it == 3) return
        Log.d(TAG, "it =$it")
    }
    Log.d(TAG, "test function")
}

当是这种情况的return,是从哪里返回的呢,我们直接运行看日志,

image.png

现在我们需要搞清它的原理,现在我们复制一下Kotlin源码中的forEach方法,改个名字forEach2,如下所示:

image.png

这时我们可以看出编译器提示:return is not allowed here。为什么我们仿照系统就直接报错提示了呢?仔细发现我们区别就在于没有inline关键字。

函数加了inline关键字表示什么意思呢,就是代码在编译的时候,编译器会将inline函数体拷贝到它调用的地方, image.png

所以根据上面kotlin return的定义,return关键字离它最近的是main函数,所以直接就从main return了。

return 是用来return函数的,return lambda表达式是不允许的,所以编译器会提示 return is not allowed here.

1.3 return@label lambda表达式处return,需要用到label,语法格式定义为labelName@