Sobes.tech
Junior

Kotlinде 'super' жана 'this' ачкыч сөздөрү кандай иштейт?

sobes.tech AI

AIден жооп

this — бул учурдагы класс мисалына же лямбда-экспрессиянын кабыл алуучусуна шилтеме. Бул класс мүчөсүн так көрсөтүү же учурдагы объектке шилтеме берүү үчүн колдонулат, мисалы, бир эле аталыштагы жергиликтүү өзгөрмө болсо (айырмаландыруу үчүн).

super — ата-эне классынан методдорду чакыруу же мүлктөргө жетүү үчүн колдонулат. Бул учурда, ата-эне классындагы ишке ашырылышты колдонуу керек болгондо колдонулат.

Мисалдар:

class MyClass(val value: Int) {
    fun printValue() {
        println(this.value) // this колдонуу менен мүчөгө кирүү
    }
}

open class Parent {
    open fun greet() {
        println("Ата-эненин саламы")
    }
}

class Child : Parent() {
    override fun greet() {
        super.greet() // ата-эне класс методун чакыруу
        println("Уулу салам")
    }
}

Лямбда функцияларда, this кабыл алуучуга шилтеме кылышы мүмкүн:

fun String.addExclamation(): String {
    return this + "!" // this кабыл алуучу строкага шилтеме кылат
}

fun main() {
    val numbers = listOf(1, 2, 3)
    val sum = numbers.sum() // sum — кеңейтүү функциясы, this списокке шилтеме кылат
    println(sum)
}

Аралаштыкты чечүү үчүн, эгерде ички класс же кабыл алуучу лямбда бар болсо, квалификацияланган this колдонсо болот (мисалы, this@ClassName же this@label).

class A { // көрүнбөгөн label @A
    inner class B { // көрүнбөгөн label @B
        fun Int.foo() { // көрүнбөгөн label @foo
            val a = this@A // A экземплярга шилтеме
            val b = this@B // B экземплярга шилтеме
            val c = this // Int экземплярга шилтеме, ал функциянын кабыл алуучусу
            val c1 = this@foo // Int экземплярга шилтеме, ал функциянын кабыл алуучусу
        }
    }
}