Secciones

Groovy como lenguaje para escribir DSLs

Inicio » Artículos » Groovy como lenguaje para escribir DSLs
La categoría del artículo es
Escrito el 24 June 2009, 14:19


Una de las características que se resaltan de Groovy es que es un lenguaje perfecto para escribir DSLs. Pero, ¿qué son los DSLs?

¿Qué son los DSLs?

Un DSL es un lenguaje de programación reducido que permite representar el conocimiento de un campo específico. Imaginemos que debemos desarrollar una aplicación que se encargue de la toma de decisiones en el entorno financiero. Para realizar la programación en Java o Groovy (o cualquier otro lenguaje), quien se encargue de la programación debería tener los conocimientos necesarios tanto del sistema financiero así como del lenguaje de programación utilizado.

Utilizando un DSL nos ahorraremos las reglas específicas del lenguaje de programación, centrando nuestros objetivos en la especificación de las reglas financieras necesarias para el correcto funcionamiento del sistema. De esta forma, vamos a poder encargar la parte relacionada con las reglas financieras a algún experto en la materia.

¿Por que Groovy?

Pues simplemente porque es un lenguaje dinámico que nos proporciona mucha libertad a la hora de crear estructuras necesarias en un contexto particular. Las características de Groovy que lo hacen idóneo para escribir DSLs son:

  • Los Builders nos permiten crear estructuras en forma de árbol estructurado
  • Se pueden añadir nuevos métodos y propiedades a través de categorías y metaclases. Incluso se puede hacer esto con los números para especificar cosas como 4.veces o 24.horas
  • La mayoría de los operadores se pueden sobrecargar para poder hacer cosas como totalMinutos = 4.dias + 12.horas
  • Podemos utilizar un mapa como parámetro en un método, lo cual es muy intuitivo. Por ejemplo mover(x:500.metros, y:2:kilometros)
  • También podemos crear nuevas estructuras de control utilizando los closures, como por ejemplo siFaltaMenosDeUnDia{…}

Ejemplo de DSL

Un ejemplo de DSL puede ser GORM (Groovy Object Relational Mapping). GORM es el framework de persistencia utilizando en Grails. Basado en Hibernate, podemos utilizar GORM sin haber visto en nuestra vida nada sobre Hibernate, simplemente conociendo el modelo de datos. Imaginemos que tenemos una clase Persona mapeada contra una tabla de la base de datos. Gracias a GORM, podríamos acceder a los datos de la siguiente forma:

Groovy:
span style="color: #808080; font-style: italic;">//Para acceder a los datos de las Personas con GORM se haría así
"Manuel""Ma%""M%", "L%")

Aquí os dejo un enlace donde se crea un DSL para realizar el cálculo de distancias


¿Tienes experiencia en la creación de lenguajes DSL con Groovy?

your_ip_is_blacklisted_by sbl.spamhaus.org.