Sobes.tech
Middle+

Kotlin'de crossinline anahtar kelimesi ne için kullanılır?

sobes.tech yapay zeka

AI'dan gelen yanıt

Kotlin'de crossinline, inline fonksiyonlardaki parametreleri işaretlemek için kullanılır. Bu, böyle bir lambda parametresinin, anonim sınıf nesneleri gibi iç içe fonksiyonlar içinde çağrılmasına izin verir ve bu fonksiyonlar inline değildir.

Normal inline fonksiyonlardaki lambdalar, yerel olmayan dönüşler (dış fonksiyondan çıkan dönüşler) içerebilir. crossinline ile işaretlenmiş bir lambda, yerel olmayan dönüşler içeremez.

Ana amaç:

  • Varsayılan olarak inline olmayan dönüş imkanı sağlayan inline lambda'ların kullanılamadığı bağlamlarda (örneğin, anonim nesneler, yerel fonksiyonlar) lambda kullanmaya izin vermek.
  • Kod yapısı nedeniyle (örneğin, lambda başka bir thread'e aktarılırken) istenmeyen veya imkansız olan yerel olmayan dönüşleri engellemek.

Örnek:

inline fun runAsyncAndFinish(crossinline block: () -> Unit) {
    // Anonim bir Runnable nesnesi oluşturma
    val runnable = object : Runnable {
        override fun run() {
            block() // İçinde crossinline lambda kullanımı
            // burada block() runAsyncAndFinish'ten yerel olmayan dönüş yapamaz
        }
    }
    // Ayrı bir thread'de çalıştırma (örnek)
    Thread(runnable).start()
    // eğer block crossinline olmasaydı, block() runAsyncAndFinish'ten dönüş yapabilirdi
    // bu, çağıran thread'den farklı bir thread'den yapılamaz
}

fun testCrossinline() {
    println("Öncesinde runAsyncAndFinish")
    runAsyncAndFinish {
        println("Asenkron blok içinde")
        // return // Derleme hatası: crossinline ile yerel olmayan dönüş kullanılamaz
    }
    println("Sonrasında runAsyncAndFinish")
}