Sobes.tech
Junior — Middle

Is het mogelijk om een return uit een functie buiten de huidige context uit te voeren binnen een functie die als crossinline is gedeclareerd in Kotlin?

sobes.tech AI

Antwoord van AI

In Kotlin voorkomt een functie die met de modifier crossinline is gedeclareerd dat er oncontroleerbare returns (non-local return) vanuit de lambda die hij accepteert worden uitgevoerd. Dit betekent dat je geen return vanuit de lambda kunt gebruiken om uit de externe functie te stappen waarin deze lambda wordt aangeroepen.

Voorbeeld:

inline fun foo(crossinline block: () -> Unit) {
    val runnable = Runnable {
        block() // hier is geen non-local return toegestaan
    }
    runnable.run()
}

fun bar() {
    foo {
        // return // compileerfout, non-local return is niet toegestaan
        println("Uitvoering van de lambda")
    }
    println("Vervolg van de functie bar")
}

Dus is het niet mogelijk om vanuit de functie buiten de huidige context terug te keren binnen een crossinline lambda. Deze beperking is ingevoerd voor de veiligheid en voorspelbaarheid van de code, vooral bij gebruik van lambdas in asynchrone of uitgestelde oproepen.