¿Kotlin Delegación y buenas prácticas?. El concepto de delegación a nivel de un lenguaje de programación es un concepto clásico y hace referencia a como nosotros podemos usar la composición para dividir responsabilidades entre varios objetos .Vamos a ver un ejemplo sencillo de delegación con Kotlin . En nuestro caso disponemos de una clase Bombilla que se puede encender y apagar . Esta clase implemente el interface Conectable.
interface Conectable { fun on() fun off() }
Por lo tanto si queremos que la clase Bombilla implemente el interface nos será suficiente con construir una clase como esta:
class Bombilla:Conectable { override fun on() { println("la bombilla se enciende") } override fun off() { println("la bombilla se apaga") } }
Hasta aquí todo correcto . Si ejecutamos este código en un programa main como el que sigue:
fun main(args: Array<String>) { var bombilla=Bombilla() bombilla.on() bombilla.off() }
Nos imprimirá en consola que la Bombilla se encience o se apaga:
la bombilla se enciende la bombilla se apaga
Kotlin Delegación
Todo correcto ahora bien ahora podemos construir la clase Lampara . Esta clase contiene una Bombilla e implementa el interface Conectable ya que una Lampara se puede encender y apagar. La peculiaridad que tiene la Lampara es que lo que enciende y apaga es su Bombilla por lo tanto podremos diseñar el código vía delegación y hacer que al encender la Lampara se encienda la Bombilla .
Vamos a verlo:
package com.arquitecturajava.pruebas open class Lampara(var bombilla:Bombilla):Conectable { override fun on() { bombilla.on() } override fun off() { bombilla.off() } }
Hasta aquí todo funciona correctamente y es un ejemplo clásico del concepto de delegación en donde una clase que usa composición delega en otra para implementar parte de su funcionalidad. Modificamos el programa main y volvemos a ejecutar:
fun main(args: Array<String>) { var lampara=Lampara(Bombilla()) lampara.on() lampara.off() }
El resultado es el mismo . Si nos fijamos la mejora que tiene este código sobre un código construido en Java es muy puntual . Ahora bien la clase Lampara en Kotlin se puede simplificar de la siguiente forma:
open class Lampara(var bombilla:Bombilla):Conectable by bombilla
Este código indica que la clase Lampara implementa el interface Conectable delegando en la Bombilla . La simplificación es total y es aquí donde un lenguaje como Kotlin brilla.
empiezo a ver necesaria la sección “Kotlin” en este blog xD. Me gusta tu contenido, saludos