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ı
}
}
}