Sobes.tech
Junior — Middle

Lehetséges-e visszatérni egy függvényből a jelenlegi kontextuson kívül egy crossinline-ként deklarált Kotlin-függvényben?

sobes.tech MI

Válasz az MI-től

Kotlinban egy crossinline módosítóval deklarált függvény megtiltja a nem kontrollált visszatérések (non-local return) végrehajtását a benne elfogadott lambda-ból. Ez azt jelenti, hogy nem lehet return-t használni a lambda-ból, hogy kilépjünk a külső függvényből, amelyben ez a lambda hívásra kerül.

Példa:

inline fun foo(crossinline block: () -> Unit) {
    val runnable = Runnable {
        block() // itt nem használható non-local return
    }
    runnable.run()
}

fun bar() {
    foo {
        // return // fordítási hiba, nem megengedett non-local return
        println("Lambda végrehajtása")
    }
    println("A bar függvény folytatása")
}

Ezért nem lehetséges a visszatérés a függvényből a jelenlegi kontextuson kívül a crossinline lambda belsejében. Ezt a korlátozást a kód biztonsága és kiszámíthatósága érdekében vezették be, különösen akkor, amikor lambdákat aszinkron vagy késleltetett hívásokban használnak.