Middle+
Kotlin-də `crossinline` modifikatoru nə üçün istifadə olunur?
sobes.tech Süni İntellekt
AI-dan cavab
crossinline dəyişdiricisi inline funksiyaların lambda parametrlərini işarələmək üçün istifadə olunur.
O, tərtibçiyə bildirir ki, müvafiq lambda non-local return (yəni, return istifadə edərək xarici funksiyadan çıxış) edə bilməz, yəni return bəyanatını istifadə edərək xarici funksiyadan çıxmaq mümkün deyil. Ancaq, lambda hələ də çağrı yerində inlined ola bilər (inlined).
Nümunə:
// Adi inline-funksiya, non-local return ilə
inline fun runTask(task: () -> Unit) {
task() // task()-dan non-local return mümkündür
println("Tapşırıq tamamlandı")
}
// crossinline parametrli inline-funksiya
inline fun runSafeTask(crossinline task: () -> Unit) {
// try-finally bloku nümunə üçün, burada crossinline lazımdır
try {
task() // task()-dan non-local return etmək YOXDUR
} finally {
println("Təmizləmə")
}
println("Təhlükəsiz tapşırıq tamamlandı")
}
fun main() {
// runTask istifadə
runTask {
println("runTask lambda daxilində")
return // İZİN VERİLİR: main()-dən non-local return
}
// "Tapşırıq tamamlandı" çap olunmayacaq
// runSafeTask istifadə
runSafeTask {
println("runSafeTask lambda daxilində")
// return // KOMPİLATOR XƏTASI: non-local return qadağandır
}
println("Təhlükəsiz tapşırıqdan sonra") // Bu çap ediləcək
}
Nə zaman faydalıdır:
crossinlinelambda çağırıldıqdan sonra kodun icra olunmasını təmin etmək istəyirsinizsə (məsələn,try-finallybloklarında).- Lambda başqa funksiyaya arqument kimi ötürülür və siz non-local return-un qarşısını almaq istəyirsinizsə, bu faydalıdır.