Sobes.tech
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:

  • crossinline lambda çağrısından sonra kodun çalışmaya devam etmesini garanti altına almak istiyorsanız (örneğin, try-finally blokları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.