Middle+
Waarvoor wordt de `crossinline` modifier gebruikt in Kotlin?
sobes.tech AI
Antwoord van AI
De crossinline modifier wordt gebruikt om lambda-parameters van inline-functies te markeren.
Het geeft de compiler aan dat de betreffende lambda geen non-local return mag uitvoeren, dat wil zeggen, geen return-statement mag gebruiken om uit de externe functie te vertrekken. De lambda kan echter nog steeds inline worden geplaatst (inlined) op de aanroeplocatie.
Voorbeeld:
// Normale inline-functie met non-local return
inline fun runTask(task: () -> Unit) {
task() // Non-local return vanuit task() is mogelijk
println("Taak voltooid")
}
// inline-functie met crossinline-parameter
inline fun runSafeTask(crossinline task: () -> Unit) {
// try-finally blok als voorbeeld, waar crossinline nodig is
try {
task() // Het is NIET toegestaan om een non-local return uit task() te doen
} finally {
println("Opruimen")
}
println("Veilige taak voltooid")
}
fun main() {
// Gebruik van runTask
runTask {
println("Binnen lambda van runTask")
return // TOEGESTAAN: non-local return uit main()
}
// De print "Taak voltooid" wordt NIET uitgevoerd
// Gebruik van runSafeTask
runSafeTask {
println("Binnen lambda van runSafeTask")
// return // FOUT VAN COMPILER: non-local return verboden
}
println("Na de veilige taak") // Deze print wordt uitgevoerd
}
Wanneer is dit nuttig:
- Wanneer je wilt garanderen dat de code na de aanroep van de
crossinlinelambda wordt uitgevoerd (bijvoorbeeld intry-finallyblokken). - Wanneer de lambda als argument wordt doorgegeven aan een andere functie die mogelijk niet inline is, en je een non-local return wilt voorkomen die de uitvoering kan verstoren.