由于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,是从哪里返回的呢,我们直接运行看日志,
现在我们需要搞清它的原理,现在我们复制一下Kotlin源码中的forEach方法,改个名字forEach2,如下所示:
这时我们可以看出编译器提示:return is not allowed here。为什么我们仿照系统就直接报错提示了呢?仔细发现我们区别就在于没有inline关键字。
函数加了inline关键字表示什么意思呢,就是代码在编译的时候,编译器会将inline函数体拷贝到它调用的地方,
所以根据上面kotlin return的定义,return关键字离它最近的是main函数,所以直接就从main return了。
return 是用来return函数的,return lambda表达式是不允许的,所以编译器会提示 return is not allowed here.
1.3 return@label lambda表达式处return,需要用到label,语法格式定义为labelName@