Middle+
La ce se folosește modificatorul `crossinline` în Kotlin?
sobes.tech AI
Răspuns de la AI
Modificatorul crossinline este utilizat pentru a marca parametrii lambda ai funcțiilor inline.
Indică compilatorului că lambda corespunzătoare nu poate efectua o returnare non-locală (non-local return), adică să folosească instrucțiunea return pentru a ieși din funcția externă. Cu toate acestea, lambda poate fi încă inserată (inlined) în locul apelului.
Exemplu:
// Funcție inline normală cu returnare non-locală
inline fun runTask(task: () -> Unit) {
task() // Returnarea non-locală este posibilă din task()
println("Sarcină finalizată")
}
// Funcție inline cu parametru crossinline
inline fun runSafeTask(crossinline task: () -> Unit) {
// Bloc try-finally ca exemplu, unde este nevoie de crossinline
try {
task() // NU este permis să faci returnare non-locală din task()
} finally {
println("Curățare")
}
println("Sarcină sigură finalizată")
}
fun main() {
// Utilizarea lui runTask
runTask {
println("În lambda-ul lui runTask")
return // PERMIS: returnare non-locală din main()
}
// Se va afișa "Sarcină finalizată" NU
// Utilizarea lui runSafeTask
runSafeTask {
println("În lambda-ul lui runSafeTask")
// return // EROARE DE COMPILARE: returnare non-locală interzisă
}
println("După sarcina sigură") // Această linie va fi executată
}
Când este util:
- Când vrei să te asiguri că codul după apelul lambda-ului
crossinlineva fi executat (de exemplu, în blocuritry-finally). - Când lambda este transmisă ca argument altor funcții care poate nu sunt inline, și vrei să previi o returnare non-locală care ar putea întrerupe fluxul de execuție.