Un vistazo a los closures en Groovy
Inicio mis post en lineadecodigo con un pequeño vistazo a los closures.
¿Qué es Groovy y qué son los Closures?
Sección titulada «¿Qué es Groovy y qué son los Closures?»Antes de empezar debemos de conocer dos conceptos. Por un lado Groovy, es un lenguaje de programación dinámico y fácil de aprender similar a Python y Ruby que va ganando terreno entre los desarrolladores Java.
Y un Closure, es la manera en como una función dentro de otra función contenedora puede hacer referencia a las variables después de que la función contenedora ha terminado de ejecutarse. Este término es algo difícil de entender, sin embargo pienso que con unos cuantos ejemplos entiendan el concepto.
Lo primero que haremos será crear un archivo (o fichero) y lo vamos a llamar “Closures.groovy”.
Ejemplos de Closures en Groovy
Sección titulada «Ejemplos de Closures en Groovy»Veamos diferentes formas de codificar un closure:
Closure simple
Sección titulada «Closure simple»Creamos un closure muy simple.
//imprime el mensaje "Hola desde un closure"def hola={ println("Hola desde un closure")}
//invocar closure "hola"hola()Closure con un parámetro
Sección titulada «Closure con un parámetro»Ahora un closure con un parámetro.
// multiplica un número por 2def doble={ n -> return n*2}
//invocar closure "doble"def numero=doble(5)println("el doble de 5 es "+numero)// también puede escribirse println "el doble de 5 es ${numero}"Closure con dos parámetros
Sección titulada «Closure con dos parámetros»Ahora un closure con dos parámetros.
def var="Bienvenido"// imprime el valor de var y el parámetro que le envie el usuariodef msg1={it -> println "${var} ${it}"}//invocamos el closure, debe salir el mensaje "Bienvenido mundo"msg1("mundo")Closure con método como parámetro
Sección titulada «Closure con método como parámetro»Closure más complejo, recibe un método como parámetro.
//defino un closure con dos parámetrosdef otro={metodo, parametro -> metodo(parametro)}//ahora defino dos closure que reciben un solo parámetrodef inicio={it -> println "Hola ${it}"}def fin={it -> println "Adios ${it}"}//invoco el closure "otro"otro(inicio,"Fernando")otro(fin,"Fernando")Closure con listas
Sección titulada «Closure con listas»Mandamos una lista a un closure.
//defino una listadef lista=["Andrea","Fernando","Antonio","Lucero","Veronica"]//uso el closure "inicio"println "\n"lista.each inicioClosure con diccionarios
Sección titulada «Closure con diccionarios»Ejemplo con closures y diccionarios.
//defino el diccionariodef dicc=['Fernando':31,'Veronica':27,'María':43,'Yezmin':26,'Horacio':15]def suma=0//defino el closuredef edadTotal={ x ->x.each{suma+=it.value// println("obtener valor: "+it.value+ " obtener llave o identificador: "+it.key)}println("Suma total de edades: "+suma)}//invoco el closureedadTotal(dicc)Ejecutar el código
Sección titulada «Ejecutar el código»Para ejecutar este archivo pueden teclear desde la consola de comandos:
groovy Closures.groovyTambién se puede probar el código mediante la consola groovy:
groovyconsole Closures.groovySi quieres puedes leer más información sobre los Closures de Groovy en http://groovy.codehaus.org/Closures
Descarga el código de Un vistazo a los closures en Groovy
Descubre cómo Groovy utiliza los closures para simplificar funciones y manipular variables. Aprenderás ejemplos prácticos y su ejecución fácil. ¡No te lo pierdas!