pretty

Monday, 6 February 2023

Kotlin return statement in anonymous function vs inlined lambda functions

Having a return statement in an anonymous function in Kotlin acts like a break statement. The return statement without a @label always returns from the nearest function declared with a 'fun' keyword (Anonymous function doc).

On the other hand, return statement inside a lambda function, that was passed to an inline function, exits the enclosing outer function. The lambda is inlined, so the return inside it is actually treated as a return from outer function scope.

fun f1() {
// Anonymous function: this will print 1 2, return acts like a break.
listOf(1,2).forEach(fun(it: Int): Unit {
println(it)
return
})
}
fun f2() {
// Lambda function: this will only print 1, return actually exits
// from the outer function f2(). As forEach() is an inline function, the lambda,
// that is passed to it as an argument becomes inlined.
listOf(1,2).forEach {
println(it)
return
}
}

No comments :

Post a Comment