Middle+
Kam paredzēts `crossinline` modifikators Kotlin?
sobes.tech AI
Atbilde no AI
Modifikators crossinline tiek izmantots, lai atzīmētu inline funkciju lambda parametrus.
Tas norāda kompilatoram, ka attiecīgā lambda funkcija nevar veikt ne lokālu, ne nolineālu atgriešanos (non-local return), tas ir, izmantot return operatoru, lai izietu no ārējās funkcijas. Tajā pašā laikā lambda joprojām var tikt iekļauta (inlined) izsaukuma vietā.
Piemērs:
// Parasta inline funkcija ar ne lokālu atgriešanos
inline fun runTask(task: () -> Unit) {
task() // Ne lokāla atgriešanās ir iespējama no task()
println("Uzdevums pabeigts")
}
// inline funkcija ar crossinline parametru
inline fun runSafeTask(crossinline task: () -> Unit) {
// try-finally bloks piemēram, kur nepieciešams crossinline
try {
task() // NEvar veikt ne lokālu, ne nolineālu atgriešanos no task()
} finally {
println("Tīrīšana")
}
println("Droša uzdevuma pabeigšana")
}
fun main() {
// Izmantošana runTask
runTask {
println("Iekšā runTask lambda")
return // IESPĒJAMS: ne lokāla atgriešanās no main()
}
// Izvade "Uzdevums pabeigts" NE tiks izpildīta
// Izmantošana runSafeTask
runSafeTask {
println("Iekšā runSafeTask lambda")
// return // KĻŪDA KOMPILĀCIJĀ: ne lokāla atgriešanās ir aizliegta
}
println("Pēc drošas uzdevuma izpildes") // Šī izvade tiks izpildīta
}
Kad tas ir noderīgi:
- Kad nepieciešams nodrošināt, ka kods pēc
crossinlinelambda funkcijas izsaukuma tiks izpildīts (piemēram,try-finallyblokos). - Kad lambda tiek nodota kā arguments citai funkcijai, kas var nebūt iekļauta, un vēlaties novērst ne lokālu atgriešanos, kas varētu pārtraukt izpildes plūsmu.