Sobes.tech
Junior

Vysvětlete použití klíčového slova 'this' v jazyce Kotlin.

sobes.tech AI

Odpověď od AI

V Kotlinu odkazuje this na aktuální instanci třídy. Jeho použití závisí na kontextu:

  1. Uvnitř metody třídy: this odkazuje na instanci, na které byla metoda volána.

    class MyClass {
        var value: Int = 0
    
        fun setValue(value: Int) {
            // Používáme this.value pro přístup k vlastnosti třídy
            // a value pro parametr metody
            this.value = value 
        }
    }
    
  2. Uvnitř rozšiřující funkce nebo vlastnosti: this odkazuje na objekt, na který se rozšíření aplikuje.

    fun String.printLength() {
        // this zde je instance String, na které byla volána rozšiřující funkce
        println("Délka řetězce: ${this.length}") 
    }
    
    fun main() {
        "Ahoj".printLength() // Vytiskne "Délka řetězce: 4"
    }
    
  3. Uvnitř literálů funkcí s příjemcem: this odkazuje na příjemce literálu.

    fun buildString(builderAction: StringBuilder.() -> Unit): String {
        val sb = StringBuilder()
        // uvnitř builderAction, this odkazuje na sb (instanci StringBuilder)
        sb.builderAction() 
        return sb.toString()
    }
    
    val myString = buildString {
        // this zde je StringBuilder
        append("Ahoj, ")
        append("svět!")
    }
    
  4. Pro kvalifikované this (při více příjemcích): Používá se k odstranění nejasností, když jsou vnořené struktury s různými příjemci (například vnořené třídy, literály funkcí s příjemcem). Syntaxe je %label@this, kde %label je značka spojená s kontextem.

    class Outer {
        inner class Inner {
            fun printThis() {
                // this odkazuje na instanci Inner
                println("Inner this: ${this}") 
                // Outer@this odkazuje na instanci Outer
                println("Outer this: ${this@Outer}") 
            }
        }
    
        fun createInner() = Inner()
    }
    
    fun main() {
        Outer().createInner().printThis()
    }
    

Obecně this v Kotlinu poskytuje jasný přístup k aktuálnímu kontextu, ať už je to instance třídy, rozšiřující objekt nebo příjemce literální funkce, což přispívá ke srozumitelnosti a předchází konfliktům názvů.