Sobes.tech
Junior

Paaiškinkite 'this' raktažodžio naudojimą Kotlin kalboje.

sobes.tech AI

Atsakymas iš AI

Kotlin this reiškia dabartinį klasės egzempliorių. Jo naudojimas priklauso nuo konteksto:

  1. Klasės metodo viduje: this nuoroda į egzempliorių, iš kurio buvo iškviestas metodas.

    class MyClass {
        var value: Int = 0
    
        fun setValue(value: Int) {
            // Naudojame this.value prieigos prie klasės savybės
            // ir value kaip metodo parametro
            this.value = value 
        }
    }
    
  2. Plėtros funkcijos ar savybės viduje: this nuoroda į objektą, prie kurio taikoma plėtra.

    fun String.printLength() {
        // this čia — String egzempliorius, ant kurio iškviesta plėtros funkcija
        println("Eilutės ilgis: ${this.length}") 
    }
    
    fun main() {
        "Sveiki".printLength() // Išves "Eilutės ilgis: 5"
    }
    
  3. Funkcijų su priėmėju (receiver) literatūrose viduje: this nuoroda į priėmėją.

    fun buildString(builderAction: StringBuilder.() -> Unit): String {
        val sb = StringBuilder()
        // Viduje builderAction, this nuoroda į sb (StringBuilder egzempliorius)
        sb.builderAction() 
        return sb.toString()
    }
    
    val myString = buildString {
        // this čia — StringBuilder
        append("Labas, ")
        append("Pasauli!")
    }
    
  4. Kvalifikuotas this (kai yra keli priėmėjai): Naudojamas neaiškumų išvengimui, kai yra įterptos struktūros su skirtingais priėmėjais (pvz., įterptos klasės, literatūros funkcijos su priėmėju). Sintaksė %label@this, kur %label yra konteksto žymė.

    class Outer {
        inner class Inner {
            fun printThis() {
                // this nuoroda į Inner egzempliorių
                println("Inner this: ${this}") 
                // Outer@this nuoroda į Outer egzempliorių
                println("Outer this: ${this@Outer}") 
            }
        }
    
        fun createInner() = Inner()
    }
    
    fun main() {
        Outer().createInner().printThis()
    }
    

Apskritai, this Kotlin suteikia aiškų prieigą prie dabartinio konteksto, nesvarbu, ar tai klasės egzempliorius, plėtros objektas ar funkcijos priėmėjas, didinant aiškumą ir išvengiant vardų konfliktų.