Sobes.tech
Junior — Middle

Може ли се извршити повратак из функције изван тренутног контекста унутар функције проглашене као crossinline у Kotlin-у?

sobes.tech АИ

Одговор од АИ

U Kotlinu, funkcija deklarisana sa modifikatorom crossinline zabranjuje izvršenje nekontrolisanih povrataka (non-local return) iz lambda izraza koji prihvata. To znači da se return iz lambda izraza ne može koristiti za izlazak iz spoljašnje funkcije u kojoj je lambda pozvana.

Primer:

inline fun foo(crossinline block: () -> Unit) {
    val runnable = Runnable {
        block() // ovde nije dozvoljen non-local return
    }
    runnable.run()
}

fun bar() {
    foo {
        // return // greška pri kompilaciji, non-local return nije dozvoljen
        println("Izvršavanje lambda")
    }
    println("Nastavak funkcije bar")
}

Dakle, povratak iz funkcije van trenutnog konteksta unutar crossinline lambda izraza je nemoguć. Ovo ograničenje je uvedeno radi sigurnosti i predvidivosti koda, posebno pri korišćenju lambda izraza u asinhronim ili odloženim pozivima.