Sobes.tech
Junior — Middle

Lze provést návrat z funkce mimo aktuálního kontextu uvnitř funkce deklarované jako crossinline v Kotlinu?

sobes.tech AI

Odpověď od AI

V Kotlinu funkce deklarovaná s modifikátorem crossinline zakazuje provádění nekontrolovaných návratů (non-local return) z lambda, kterou přijímá. To znamená, že nelze z lambda provést return pro opuštění vnější funkce, ve které je lambda volána.

Příklad:

inline fun foo(crossinline block: () -> Unit) {
    val runnable = Runnable {
        block() // zde není povolen non-local return
    }
    runnable.run()
}

fun bar() {
    foo {
        // return // chyba kompilace, non-local return není povolen
        println("Provádění lambda")
    }
    println("Pokračování funkce bar")
}

Proto není možné vrátit z funkce mimo aktuální kontext uvnitř crossinline lambda. Toto omezení bylo zavedeno pro bezpečnost a předvídatelnost kódu, zejména při použití lambda v asynchronních nebo odložených voláních.