¿Qué es la delegación en Kotlin?
sobes.tech AI
Respuesta de la IA
La delegación en Kotlin es un patrón de diseño en el que un objeto (delegado) asume la responsabilidad de realizar una tarea en nombre de otro objeto. Kotlin soporta la delegación nativamente a nivel de sintaxis.
Existen dos tipos principales de delegación en Kotlin:
-
Delegación de clase (Class Delegation): Permite que una clase A implemente una interfaz, delegando todas las llamadas a los métodos de esa interfaz a otro objeto B.
interface Base { fun printMessage() } class BaseImpl(val x: Int) : Base { override fun printMessage() { // Implementación del método de la interfaz println(x) } } class Derived(b: Base) : Base by b // Delegación a la clase BaseImplEn el ejemplo,
Deriveddelega la implementación deBaseal objetob. -
Delegación de propiedades (Delegated Properties): Permite delegar la lógica de obtención y establecimiento del valor de una propiedad a otro objeto. Kotlin proporciona varios delegados estándar:
lazy()para inicialización diferida.val lazyValue: String by lazy { // Se ejecuta solo en la primera referencia a lazyValue println("¡se calcula!") "Hola" }Delegates.observable()para notificar a los oyentes sobre cambios.import kotlin.properties.Delegates var name: String by Delegates.observable("valor inicial") { prop, old, new -> println("$old -> $new") }Delegates.vetoable()para interceptar cambios antes de aplicarlos.import kotlin.properties.Delegates var max: Int by Delegates.vetoable(0) { prop, old, new -> new > old }- Delegados para enlazar con propiedades de mapas (
map).Uso:class User(val map: Map<String, Any?>) { val name: String by map val age: Int by map }User(mapOf("name" to "John Doe", "age" to 25))
Ventajas del uso de delegación en Kotlin:
- Reducción de código repetitivo: Redirige automáticamente llamadas a métodos o lógica de propiedades.
- Reutilización de código: Posibilidad de usar delegados existentes o crear los propios.
- Separación de responsabilidades: Claramente divide la lógica de la propiedad o interfaz.
- Flexibilidad: Permite cambiar el comportamiento de la delegación sin modificar la clase.