Middle+
K čemu slouží modifikátor `crossinline` v Kotlinu?
sobes.tech AI
Odpověď od AI
Modifikátor crossinline se používá k označení parametrů lambda funkcí inline.
Indikuje překladači, že odpovídající lambda nem může provádět non-local return (tedy použití příkazu return k opuštění vnější funkce). Lambda však stále může být vložena (inlined) na místě volání.
Příklad:
// Normální inline funkce s non-local return
inline fun runTask(task: () -> Unit) {
task() // Non-local return z task() je možný
println("Úkol dokončen")
}
// inline funkce s parametrem crossinline
inline fun runSafeTask(crossinline task: () -> Unit) {
// blok try-finally jako příklad, kde je potřeba crossinline
try {
task() // NENÍ povoleno dělat non-local return z task()
} finally {
println("Úklid")
}
println("Bezpečné dokončení úkolu")
}
fun main() {
// Použití runTask
runTask {
println("Uvnitř lambda runTask")
return // POVOLENO: non-local return z main()
}
// Tisk "Úkol dokončen" nebude proveden
// Použití runSafeTask
runSafeTask {
println("Uvnitř lambda runSafeTask")
// return // CHYBA KOMPILACE: zakázaný non-local return
}
println("Po bezpečném úkolu") // Tento tisk bude proveden
}
Kdy je to užitečné:
- Když chcete zajistit, že kód po volání lambda
crossinlinebude proveden (například v blocíchtry-finally). - Když lambda je předávána jako argument jiné funkci, která nemusí být inline, a chcete zabránit non-local return, který by mohl narušit tok provádění.