Sobes.tech
Junior

Илҳом диҳед истифодаи калимаи калидии 'this' дар Kotlin.

sobes.tech AI

Ҷавоб аз AI

У Kotlin this адносіцца да бягучага экземпляра класа. Яго выкарыстанне залежыць ад кантэксту:

  1. Унутры метада класа: this спасылаецца на экземпляр, на якім быў выкліканы метад.

    class MyClass {
        var value: Int = 0
    
        fun setValue(value: Int) {
            // Выкарыстоўваем this.value для доступу да ўласцівасці класа
            // і value для параметра метада
            this.value = value 
        }
    }
    
  2. Унутры пашырэння функцыі або ўласцівасці: this спасылаецца на аб'ект, да якога прымяняецца пашырэнне.

    fun String.printLength() {
        // this тут — экземпляр String, на якім выклікана пашырэнне
        println("Даўжыня радка: ${this.length}") 
    }
    
    fun main() {
        "Прывет".printLength() // Выведзе "Даўжыня радка: 6"
    }
    
  3. Унутры літэралаў функцый з прыёмнікам (receiver): this спасылаецца на прыёмнік літэрала.

    fun buildString(builderAction: StringBuilder.() -> Unit): String {
        val sb = StringBuilder()
        // Унутры builderAction this спасылаецца на sb (экземпляр StringBuilder)
        sb.builderAction() 
        return sb.toString()
    }
    
    val myString = buildString {
        // this тут — StringBuilder
        append("Прывет, ")
        append("Свет!")
    }
    
  4. Для кваліфікаванага this (калі ёсць некалькі прыёмнікаў): Выкарыстоўваецца для вырашэння неадназначнасці, калі ёсць унутраныя структуры з рознымі прыёмнікамі (напрыклад, унутраныя класы, літэралы функцый з прыёмнікам). Сінтаксіс %label@this, дзе %label — гэта метка, звязаная з кантэкстам.

    class Outer {
        inner class Inner {
            fun printThis() {
                // this спасылаецца на экземпляр Inner
                println("Inner this: ${this}") 
                // Outer@this спасылаецца на экземпляр Outer
                println("Outer this: ${this@Outer}") 
            }
        }
    
        fun createInner() = Inner()
    }
    
    fun main() {
        Outer().createInner().printThis()
    }
    

У цэлым, this у Kotlin забяспечвае ясны доступ да бягучага кантэксту, будь то экземпляр класа, аб'ект пашырэння або прыёмнік літэрала функцыі, што спрыяе яснасці і прадухіляе канфлікты ў імёнах.