¿Qué son las extensiones en el lenguaje de programación Kotlin?
sobes.tech AI
Respuesta de la IA
Las extensiones en Kotlin permiten agregar nuevas funciones o propiedades a clases existentes sin heredar de ellas ni usar decoradores.
Conceptos principales:
-
Funciones de extensión: Añaden nuevos métodos a las clases.
// Definición de una función de extensión fun String.removeWhitespaces(): String { return this.filter { it.isWhitespace().not() } } // Uso de la función de extensión val myString = " Hello World " val cleanedString = myString.removeWhitespaces() // cleanedString será "HelloWorld"La palabra clave
thisdentro de la función de extensión hace referencia al objeto sobre el cual se llama la extensión (en el ejemplo, amyString). -
Propiedades de extensión: Permiten agregar nuevas propiedades a las clases, pero no pueden tener estado, es decir, no pueden almacenar datos. Se calculan en cada acceso.
// Definición de una propiedad de extensión val <T> List<T>.lastIndex: Int get() = size - 1 // Uso de la propiedad de extensión val myList = listOf(1, 2, 3) val indexLast = myList.lastIndex // indexLast será 2Las propiedades de extensión deben tener un getter. El setter es opcional.
Características:
-
Despacho estático: La llamada a una extensión se determina por el tipo de la variable, no por el tipo del objeto en tiempo de ejecución. Esto difiere de los métodos virtuales en programación orientada a objetos.
open class Parent class Child : Parent() fun Parent.printType() = println("Parent") fun Child.printType() = println("Child") val p: Parent = Child() p.printType() // Imprimirá "Parent", porque el tipo de la variable 'p' es Parent -
Miembros privados y protected: Las extensiones no pueden acceder a miembros privados o protected de la clase que extienden.
-
Extensiones en objetos companion: Se pueden extender los objetos companion de una clase.
class MyClass { companion object { fun create() = MyClass() } } fun MyClass.Companion.printName() = println("MyClass Companion") MyClass.printName() // Imprimirá "MyClass Companion" -
Ámbito de visibilidad: Las extensiones deben declararse en un archivo y luego importarse para usarlas en otros archivos.
Las extensiones son una herramienta poderosa para crear código legible y flexible, permitiendo agregar funcionalidad a clases de bibliotecas externas sin modificar su código fuente.