我来学Kotlin-基础之返回值与跳转
文章目录
Kotlin有三种结构性的跳转表达式:
return
默认从最近的函数或者匿名函数返回,后面的代码不再执行break
跳出break
最近的一个循环continue
忽略后面的代码,跳转到下一个步骤
所有这些表达式都可以用作更大的表达式的一部分:
|
|
这个表达式的类型是Nothing
类型
break和continue标签
在Kotlin里所有的表达式都可以用一个标签(label
)来标记。标签由一个合法的标识符跟上一个@
符号缓存,例如:abc@, fooBar@都是合法的标签。要标记一个表达式,只需要把标签放在表达式前面即可:
|
|
上面这段代码的输出如下:
|
|
如果没有loop
标签,那么break的行为是跳出里面一层的循环,输出结果还会有i, j = 2, 1
等等,加了标签后直接跳出到最外层的循环。而continue
是返回到标签处继续下一次的循环,下面的代码中带标签的continue
和不带标签的break
作用是一样的:
|
|
return
关键字return
跟Java的差不多,但是功能要复杂一些,个人认为没有Scala的函数式那么纯粹。return
是用在函数里面来返回一个值给调用者。
|
|
当执行到return
时候,函数立即返回,仅仅只是最接近return
的那个函数返回,看下面两个例子:
|
|
baz函数会打印1, 3, 4, 5, 6, 7, 8, 9, 10,而没有2,因为在循环到2的时候匿名函数直接返回了,但是forEach还在继续执行。 而jaz函数仅仅打印1,这里使用的是lambda来代替显示的fun定义。
来看下下面两个函数foo
和bar
:
|
|
这两个函数与上面的baz, jaz是一样的,使用了标签的return,就像是使用匿名的fun定义一样,不会阻止循环的执行。
在使用forEach迭代的时候,默认有一个forEach@标签,可以直接使用return@forEach
。另外使用了标签的return后面是可以带上一个值的,例如:return@abc 123