Sobes.tech
Junior

Kotlin'de 'super' ve 'this' anahtar kelimeleri nasıl çalışır?

sobes.tech yapay zeka

AI'dan gelen yanıt

this şu anda sınıfın örneğine veya lambda ifadesinin alıcısına atıfta bulunur. Bu, karışıklık durumunda (örneğin, aynı isimde yerel değişkenler varsa) sınıf üyesini veya mevcut nesneye referansı açıkça belirtmek için kullanılır.

super ise ebeveyn sınıfın metodlarını çağırmak veya özelliklerine erişmek için kullanılır. Bu, mevcut sınıfta yeniden tanımlanmış bir uygulama yerine ebeveyn sınıfın uygulamasını kullanmak istediğinizde uygulanır.

Örnekler:

class MyClass(val value: Int) {
    fun printValue() {
        println(this.value) // this kullanımıyla özelliğe açıkça erişim
    }
}

open class Parent {
    open fun greet() {
        println("Ebeveynden merhaba")
    }
}

class Child : Parent() {
    override fun greet() {
        super.greet() // ebeveyn sınıfın metodunu çağırma
        println("Çocuktan merhaba")
    }
}

Lambda fonksiyonlarında this alıcıya referans olabilir:

fun String.addExclamation(): String {
    return this + "!" // this, alıcı dizeye referans verir
}

fun main() {
    val numbers = listOf(1, 2, 3)
    val sum = numbers.sum() // sum, genişletme fonksiyonudur, this burada list'e referans olur
    println(sum)
}

İç içe sınıflar veya alıcıları olan lambda'lar söz konusuysa, nitelikli this kullanabilirsiniz (this@ClassName veya this@label):

class A { // varsayılan etiket @A
    inner class B { // varsayılan etiket @B
        fun Int.foo() { // varsayılan etiket @foo
            val a = this@A // A örneğine referans
            val b = this@B // B örneğine referans
            val c = this // Int örneğine, fonksiyonun alıcısı
            val c1 = this@foo // Int örneğine, fonksiyonun alıcısı
        }
    }
}