Sobes.tech
Junior — Middle

Je možné vykonať návrat z funkcie mimo aktuálneho kontextu vo vnútri funkcie, ktorá je deklarovaná ako crossinline v Kotlin?

sobes.tech AI

Odpoveď od AI

V Kotlinu, funkcia deklarovaná s modifikátorom crossinline zakazuje vykonávanie nekontrolovaných návratov (non-local return) z lambda, ktorú prijíma. To znamená, že z lambda nie je možné použiť return na opustenie vonkajšej funkcie, v ktorej je lambda volaná.

Príklad:

inline fun foo(crossinline block: () -> Unit) {
    val runnable = Runnable {
        block() // tu nie je povolený non-local return
    }
    runnable.run()
}

fun bar() {
    foo {
        // return // chyba kompilácie, non-local return nie je povolený
        println("Vykonávanie lambda")
    }
    println("Pokračovanie funkcie bar")
}

Preto nie je možné vrátiť z funkcie mimo aktuálneho kontextu vnútri crossinline lambda. Toto obmedzenie bolo zavedené pre bezpečnosť a predvídateľnosť kódu, najmä pri použití lambda v asynchrónnych alebo odložených volaniach.