Sobes.tech
Junior

Explicați utilizarea cuvântului cheie 'this' în Kotlin.

sobes.tech AI

Răspuns de la AI

În Kotlin, this se referă la instanța curentă a clasei. Utilizarea sa depinde de context:

  1. În interiorul unei metode de clasă: this face referire la instanța pe care a fost apelată metoda.

    class MyClass {
        var value: Int = 0
    
        fun setValue(value: Int) {
            // Folosim this.value pentru a accesa proprietatea clasei
            // și value pentru parametrul metodei
            this.value = value 
        }
    }
    
  2. În interiorul unei funcții sau proprietăți de extensie: this face referire la obiectul asupra căruia se aplică extensia.

    fun String.printLength() {
        // this aici este instanța String pe care s-a apelat funcția de extensie
        println("Lungimea șirului: ${this.length}") 
    }
    
    fun main() {
        "Salut".printLength() // Va afișa "Lungimea șirului: 5"
    }
    
  3. În interiorul literale de funcții cu receptor: this face referire la receptorul literalei.

    fun buildString(builderAction: StringBuilder.() -> Unit): String {
        val sb = StringBuilder()
        // În interiorul builderAction, this face referire la sb (instanța StringBuilder)
        sb.builderAction() 
        return sb.toString()
    }
    
    val myString = buildString {
        // this aici este StringBuilder
        append("Salut, ")
        append("Lume!")
    }
    
  4. Pentru this calificat (când există mai mulți receptori): Se folosește pentru a elimina ambiguitatea atunci când există structuri imbricate cu receptori diferiți (de exemplu, clase imbricate, literale de funcții cu receptor). Sintaxa este %label@this, unde %label este o etichetă asociată cu contextul.

    class Outer {
        inner class Inner {
            fun printThis() {
                // this face referire la instanța Inner
                println("Inner this: ${this}") 
                // Outer@this face referire la instanța Outer
                println("Outer this: ${this@Outer}") 
            }
        }
    
        fun createInner() = Inner()
    }
    
    fun main() {
        Outer().createInner().printThis()
    }
    

În general, this în Kotlin oferă acces explicit la contextul curent, fie că este o instanță de clasă, un obiect de extensie sau un receptor de funcție literal, contribuind la claritate și evitând conflictele de nume.