En el artículo anterior finalizamos la creación del DSL añadiendo restricciones de acceso a los receptores implícitos dentro de las funciones de orden superior. En este artículo jugaremos un poco con el DSL y sacaremos algunas conclusiones.

Como ya mencioné en el artículo de introducción de esta serie, un DSL interno se construye sobre un GPL y puede convivir con dicho lenguaje sin ningún problema. Esto nos permite aplicar instrucciones en dicho lenguaje dentro del DSL sin que genere errores. Por ejemplo, podríamos crear figuras de tipo ‘Triángulo’ usando un ciclo o bucle de la siguiente manera:

La ejecución del código anterior arroja el siguiente resultado:

Incluso podrías guardar las figuras en una lista y luego combinarlas todas con la operación intersección:

Dado que se agregan figuras de manera aleatoria y que el orden de la combinación también se hace de manera aleatoria, en cada ejecución se obtendrá una salida diferente. Una de estas salidas es la siguiente:

Al parecer todo funciona perfectamente, sin embargo, quiero que hagamos una prueba más antes de finalizar. Esta vez vamos a crear una figura compuesta creando las figuras involucradas directamente dentro del bloque del lambda de la función composed:

Al ejecutar el código anterior obtenemos la siguiente salida:

Como puedes observar, las figuras creadas dentro del bloque de código del lambda de la función composed son a la vez incluidas dentro del Panel, aunque claramente esa no es nuestra intención. Este es un problema que tiene el DSL pero que puede ser fácilmente corregido modificando el lambda de la función composed. Te dejo como ejercicio la modificación del DSL para que al ejecutar el código anterior se obtenga la siguiente salida:

💬 Puedes encontrar la solución en la rama dsl-enhanced dentro del proyecto Shapes-DSL.

Estoy seguro de que cuando iniciaste esta serie y mirabas la imagen de la portada la dejabas pasar y continuabas con la lectura sin darle importancia al código plasmado en ella, pero conforme ibas avanzando en la serie hasta este punto, tu percepción fue cambiando de manera que ahora no puedes mirar la imagen sin pensar en el código que hay por debajo y que permite expresar esas instrucciones de la manera en que lo hace.

Con el conocimiento que has adquirido, ahora puedes crear un DSL cuando lo creas conveniente, ya sea porque quieres crear una librería, porque estés trabajando en un módulo complicado, o porque simplemente quieras simplificar el código que consideres verboso o difícil de leer.

Aprovecha la potencia de Kotlin y crea código elegante que permita que la lectura, el mantenimiento y la escalabilidad de un sistema sea más simple y que ahorre tiempo, todos los desarrolladores de tu equipo e incluso tú mismo estarán agradecidos.

--

--

Glenn Sandoval
Kotlin en Android

I’m a software developer who loves learning and making new things all the time. I especially like mobile technology.