Sobes.tech
Junior

Explain the use of the keyword 'this' in the Kotlin language.

sobes.tech AI

Answer from AI

In Kotlin, this refers to the current instance of a class. Its usage depends on the context:

  1. Inside a class method: this refers to the instance on which the method was called.

    class MyClass {
        var value: Int = 0
    
        fun setValue(value: Int) {
            // Use this.value to access the class property
            // and value for the method parameter
            this.value = value 
        }
    }
    
  2. Inside an extension function or property: this refers to the object the extension is applied to.

    fun String.printLength() {
        // this here is the String instance on which the extension function is called
        println("String length: ${this.length}") 
    }
    
    fun main() {
        "Hello".printLength() // Outputs "String length: 5"
    }
    
  3. Inside a lambda with receiver: this refers to the receiver of the lambda.

    fun buildString(builderAction: StringBuilder.() -> Unit): String {
        val sb = StringBuilder()
        // Inside builderAction, this refers to sb (StringBuilder instance)
        sb.builderAction() 
        return sb.toString()
    }
    
    val myString = buildString {
        // this here is StringBuilder
        append("Hello, ")
        append("World!")
    }
    
  4. Qualified this (when multiple receivers are present): Used to disambiguate when there are nested structures with different receivers (e.g., nested classes, lambda with receiver). The syntax is %label@this, where %label is a label associated with the context.

    class Outer {
        inner class Inner {
            fun printThis() {
                // this refers to the Inner instance
                println("Inner this: ${this}") 
                // Outer@this refers to the Outer instance
                println("Outer this: ${this@Outer}") 
            }
        }
    
        fun createInner() = Inner()
    }
    
    fun main() {
        Outer().createInner().printThis()
    }
    

Overall, this in Kotlin provides explicit access to the current context, whether it is a class instance, an extension object, or a lambda receiver, aiding clarity and avoiding naming conflicts.

Explain the use of the keyword 'this' in the Kotlin… - sobes.tech