Sobes.tech
Junior

Kotlin-də 'super' və 'this' açar sözləri necə işləyir?

sobes.tech Süni İntellekt

AI-dan cavab

this cari sinifin və ya lambda ifadəsinin qəbulçusuna istinad edir. Bu, sinif üzvünü və ya hazırki obyektə istinad etmək üçün istifadə olunur, xüsusən də çoxmənalı vəziyyətlərdə (məsələn, eyni adlı yerli dəyişən olduqda).

super valideyn sinifin metodlarını çağırmaq və ya xüsusiyyətlərinə daxil olmaq üçün istifadə olunur. Bu, hazırki sinifdə yenidən yazılmış implementasiya yerinə valideyn sinifin implementasiyasını istifadə etmək istədiyiniz zaman tətbiq edilir.

Misallar:

class MyClass(val value: Int) {
    fun printValue() {
        println(this.value) // this istifadə edərək xüsusiyyətə əlçatanlıq
    }
}

open class Parent {
    open fun greet() {
        println("Valideyndən salam")
    }
}

class Child : Parent() {
    override fun greet() {
        super.greet() // valideyn sinifin metodunu çağırmaq
        println("Uşaqdan salam")
    }
}

Lambda funksiyalarında, this qəbulçunun referansına çevrilə bilər:

fun String.addExclamation(): String {
    return this + "!" // this qəbulçunun string olduğunu göstərir
}

fun main() {
    val numbers = listOf(1, 2, 3)
    val sum = numbers.sum() // sum genişləndirmə funksiyasıdır, this burada listə istinad edir
    println(sum)
}

Qarışıqlığı həll etmək üçün, iç-içə siniflər və ya qəbulçuları olan lambda'lar üçün, keyfiyyətli this istifadə edə bilərsiniz (this@ClassName və ya this@label):

class A { // qeyri-adi etiket @A
    inner class B { // qeyri-adi etiket @B
        fun Int.foo() { // qeyri-adi etiket @foo
            val a = this@A // A nümunəsinə istinad
            val b = this@B // B nümunəsinə istinad
            val c = this // Int nümunəsinə, `foo` funksiyasının qəbulçusuna
            val c1 = this@foo // Int nümunəsinə, `foo` funksiyasının qəbulçusuna
        }
    }
}