Middle+
Kotlin'da `crossinline` modifikatori nima uchun ishlatiladi?
sobes.tech AI
AIdan javob
crossinline o'zgartiruvchisi inline-funksiyalarning lambda parametrlari uchun ishlatiladi.
U kompilatorga, mos lambda non-local return (ya'ni, return yordamida tashqi funksiyadan chiqish) qilmasligini ko'rsatadi. Biroq, lambda hali ham chaqirish joyida inlined bo'lishi mumkin (inlined).
Misol:
// Oddiy inline-funksiya, non-local return bilan
inline fun runTask(task: () -> Unit) {
task() // task() dan non-local return mumkin
println("Vazifa tugadi")
}
// crossinline parametrli inline-funksiya
inline fun runSafeTask(crossinline task: () -> Unit) {
// try-finally blok misol uchun, bu yerda crossinline kerak
try {
task() // task() dan non-local return qilish mumkin emas
} finally {
println("Tozalash")
}
println("Xavfsiz vazifa tugadi")
}
fun main() {
// runTask dan foydalanish
runTask {
println("runTask lambda ichida")
return // RUXSAT: main() dan non-local return
}
// "Vazifa tugadi" chop etilmaydi
// runSafeTask dan foydalanish
runSafeTask {
println("runSafeTask lambda ichida")
// return // KODNI KOMPILYATSIYA XATOSI: non-local return taqiqlangan
}
println("Xavfsiz vazfadan keyin") // Bu chop etiladi
}
Qachon foydali:
crossinlinelambda chaqirilgandan keyin kod bajarilishini ta'minlash uchun (masalan,try-finallybloklarida).- Lambda boshqa funksiyaga argument sifatida uzatilganda va siz non-local returnni oldini olishni istasangiz, bu foydalidir.