Returns and jumps
Kotlin has three structural jump expressions:
return
by default returns from the nearest enclosing function or anonymous function.break
terminates the nearest enclosing loop.continue
proceeds to the next step of the nearest enclosing loop.
All of these expressions can be used as part of larger expressions:
The type of these expressions is the Nothing type.
Break and continue labels
Any expression in Kotlin may be marked with a label. Labels have the form of an identifier followed by the @
sign, such as abc@
or fooBar@
. To label an expression, just add a label in front of it.
Now, you can qualify a break
or a continue
with a label:
A break
qualified with a label jumps to the execution point right after the loop marked with that label. A continue
proceeds to the next iteration of that loop.
Return to labels
In Kotlin, functions can be nested using function literals, local functions, and object expressions. A qualified return
allows you to return from an outer function.
The most important use case is returning from a lambda expression. To return from a lambda expression, label it and qualify the return
:
Now, it returns only from the lambda expression. Often it is more convenient to use implicit labels, because such a label has the same name as the function to which the lambda is passed.
Alternatively, you can replace the lambda expression with an anonymous function. A return
statement in an anonymous function will return from the anonymous function itself.
Note that the use of local returns in the previous three examples is similar to the use of continue
in regular loops.
There is no direct equivalent for break
, but it can be simulated by adding another nesting lambda and non-locally returning from it:
When returning a value, the parser gives preference to the qualified return:
This means "return 1
at label @a
" rather than "return a labeled expression (@a 1)
".