Junior
¿Cómo funcionan las palabras clave 'super' y 'this' en Kotlin?
sobes.tech AI
Respuesta de la IA
this hace referencia a la instancia actual de la clase o al destinatario de una expresión lambda. Se usa para indicar explícitamente un miembro de la clase o una referencia al objeto actual cuando hay ambigüedad (por ejemplo, cuando hay una variable local con el mismo nombre).
super se usa para llamar a métodos o acceder a propiedades de la clase padre. Se aplica cuando se necesita usar la implementación de la clase padre en lugar de la implementación sobrescrita en la clase actual.
Ejemplos:
class MyClass(val value: Int) {
fun printValue() {
println(this.value) // Uso explícito de this para acceder a la propiedad
}
}
open class Parent {
open fun greet() {
println("Hola desde el padre")
}
}
class Child : Parent() {
override fun greet() {
super.greet() // Llamada al método de la clase padre
println("Hola desde el hijo")
}
}
Al usar en funciones lambda, this puede referirse al receptor de la lambda:
fun String.addExclamation(): String {
return this + "!" // this hace referencia a la cadena receptora
}
fun main() {
val numbers = listOf(1, 2, 3)
val sum = numbers.sum() // sum es una función de extensión, this dentro se refiere a la lista numbers
println(sum)
}
Para resolver ambigüedades, cuando tienes clases anidadas o lambdas con receptores, puedes usar this@ClassName o this@label para calificar:
class A { // etiqueta implícita @A
inner class B { // etiqueta implícita @B
fun Int.foo() { // etiqueta implícita @foo
val a = this@A // referencia a la instancia de A
val b = this@B // referencia a la instancia de B
val c = this // referencia a la instancia de Int, receptor de la función foo
val c1 = this@foo // referencia a la instancia de Int, receptor de la función foo
}
}
}