Middle+
Milleks kasutatakse `crossinline` modifikatsiooni Kotlinis?
sobes.tech AI
Vastus AI-lt
Modifikator crossinline kasutatakse inline-funktsioonide lambda-parameetrite märkimiseks.
See näitab kompilaatorile, et vastav lambda-funktsioon ei saa teha mitte-lokaalset tagasipöördumist (non-local return), st kasutada return-i, et väljuda välisfunktsioonist. Samal ajal võib lambda siiski olla sisestatud (inlined) kutsumiskohta.
Näide:
// Tavaline inline-funktsioon mitte-lokaalse tagasipöördumisega
inline fun runTask(task: () -> Unit) {
task() // Mitte-lokaalne tagasipöördumine on võimalik task()-ist
println("Ülesanne lõpetatud")
}
// inline-funktsioon crossinline-parameetriga
inline fun runSafeTask(crossinline task: () -> Unit) {
// try-finally plokk näitena, kus on vaja crossinline
try {
task() // EI ole lubatud teha mitte-lokaalset tagasipöördumist
} finally {
println("Puhastamine")
}
println("Turvaline ülesande lõpetamine")
}
fun main() {
// Kasutades runTask
runTask {
println("Ise runTask lambda sees")
return // VÕIMALIK: mitte-lokaalne tagasipöördumine main()-st
}
// Prindi "Ülesanne lõpetatud" EI tehta
// Kasutades runSafeTask
runSafeTask {
println("Ise runSafeTask lambda sees")
// return // VIGA KOMPILEERIMISEL: mitte-lokaalne tagasipöördumine on keelatud
}
println("Pärast turvalist ülesannet") // See print teostatakse
}