Sobes.tech
Junior

Kotlin'da 'super' va 'this' kalit so'zlari qanday ishlaydi?

sobes.tech AI

AIdan javob

this hozirgi sinf yoki lambda ifodasining olchoviga murojaat qiladi. Bu, nomi bilan bir xil bo'lgan mahalliy o'zgaruvchi bo'lsa ham, sinf a'zosini yoki hozirgi ob'ektga murojaat qilish uchun aniq ko'rsatish uchun ishlatiladi.

super ota-ona sinfidagi metodlarni chaqirish yoki xususiyatlarga kirish uchun ishlatiladi. Bu, hozirgi sinfda qayta yozilgan amalga oshirish o'rniga ota-ona sinfidagi amalga oshirishni ishlatish kerak bo'lsa, qo'llaniladi.

Misollar:

class MyClass(val value: Int) {
    fun printValue() {
        println(this.value) // this ni aniq ishlatish orqali xususiyatga kirish
    }
}

open class Parent {
    open fun greet() {
        println("Ota-ona dan salom")
    }
}

class Child : Parent() {
    override fun greet() {
        super.greet() // ota-ona sinfidagi metodni chaqirish
        println("Farzanddan salom")
    }
}

Lambda funksiyalarida, this lambda olchoviga murojaat qilishi mumkin:

fun String.addExclamation(): String {
    return this + "!" // this, oluvchi satrga murojaat qiladi
}

fun main() {
    val numbers = listOf(1, 2, 3)
    val sum = numbers.sum() // sum, kengaytirish funksiyasi, this ichida listga murojaat qiladi
    println(sum)
}

Noaniqliklarni hal qilish uchun, agar sizda ichma-ich sinflar yoki olchovli lambda'lar bo'lsa, sifatli this (masalan, this@ClassName yoki this@label) ishlatish mumkin:

class A { // noaniq belgi @A
    inner class B { // noaniq belgi @B
        fun Int.foo() { // noaniq belgi @foo
            val a = this@A // A ob'ektiga murojaat
            val b = this@B // B ob'ektiga murojaat
            val c = this // Int ob'ektiga, `foo` funksiyasining olchoviga
            val c1 = this@foo // Int ob'ektiga, `foo` funksiyasining olchoviga
        }
    }
}