Middle+
Na čo slúži modifikátor `crossinline` v Kotlin?
sobes.tech AI
Odpoveď od AI
Modifikátor crossinline se koristi za označavanje parametrov lambda inline funkcií.
Indikuje prekladaču, že príslušná lambda nemôže vykonať non-local return (t.j. použiť príkaz return na opustenie vonkajšej funkcie). Lambda však stále môže byť vložená (inlined) na mieste volania.
Príklad:
// Bežná inline funkcia s non-local return
inline fun runTask(task: () -> Unit) {
task() // Non-local return z task() je možný
println("Úloha dokončená")
}
// inline funkcia s parametrom crossinline
inline fun runSafeTask(crossinline task: () -> Unit) {
// try-finally blok ako príklad, kde je potrebný crossinline
try {
task() // NIE je povolené robiť non-local return z task()
} finally {
println("Upratovanie")
}
println("Bezpečné dokončenie úlohy")
}
fun main() {
// Použitie runTask
runTask {
println("Vnútri lambda od runTask")
return // POVOLENÉ: non-local return z main()
}
// "Úloha dokončená" sa NEbude vykonávať
// Použitie runSafeTask
runSafeTask {
println("Vnútri lambda od runSafeTask")
// return // CHYBA KOMPILÁTORU: zakázaný non-local return
}
println("Po bezpečnej úlohe") // Tento výpis bude vykonaný
}
Kedy je to užitočné:
- Keď chcete zabezpečiť, že kód po volaní
crossinlinelambda bude vykonaný (napríklad vtry-finallyblokoch). - Keď lambda je odovzdaná ako argument inej funkcie, ktorá nemusí byť inline, a chcete zabrániť non-local return, ktorý by mohol narušiť tok vykonávania.