Middle+
Kotlin'de `crossinline` modifikatorü ne işe yarar?
sobes.tech yapay zeka
AI'dan gelen yanıt
crossinline değiştiricisi, inline fonksiyonların lambda parametrelerini işaretlemek için kullanılır.
Derleyiciye, ilgili lambda fonksiyonunun non-local return (yani, dış fonksiyondan çıkış yapmak için return kullanmak) yapamayacağını belirtir. Ancak, lambda hala çağrı yerine gömülebilir (inlined) durumda kalabilir.
Örnek:
// Normal inline fonksiyon, non-local return ile
inline fun runTask(task: () -> Unit) {
task() // task() içinden non-local return mümkün
println("Görev tamamlandı")
}
// crossinline parametreli inline fonksiyon
inline fun runSafeTask(crossinline task: () -> Unit) {
// try-finally bloğu örneği, burada crossinline gerekebilir
try {
task() // task() içinden non-local return yapılamaz
} finally {
println("Temizlik")
}
println("Güvenli görev tamamlandı")
}
fun main() {
// runTask kullanımı
runTask {
println("runTask içindeki lambda")
return // İZİN VERİLİR: main() içinden non-local return
}
// "Görev tamamlandı" yazısı YAZILMAYACAK
// runSafeTask kullanımı
runSafeTask {
println("runSafeTask içindeki lambda")
// return // DERLEME HATASI: non-local return yasak
}
println("Güvenli görev sonrası") // Bu yazı YAZILACAK
}
Ne zaman faydalıdır:
crossinlinelambda çağrısından sonra kodun çalışmaya devam etmesini garanti altına almak istiyorsanız (örneğin,try-finallybloklarında).- Lambda başka bir fonksiyona argüman olarak geçildiğinde ve bu fonksiyon inline değilse, ve non-local return'un engellenmesi gerekiyorsa, bu kullanışlıdır.