Groovy: un vistazo a los closures

12/Jul/2012 Groovy , , , Deja un comentario

Inicio mis post en lineadecodigo con un pequeño vistazo a 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 dificil 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". Veamos diferentes formas de codificar un clousure:

1. Creamos un closure muy simple.

  1.  
  2. //imprime el mensaje "Hola desde un closure"
  3. def hola={
  4. println("Hola desde un closure")
  5. }
  6.  
  7. //invocar closure "hola"
  8. hola()
  9.  

2. Ahora un closure con un parámetro.

  1.  
  2. // multiplica un número por 2
  3. def doble={ n ->
  4. return n*2
  5. }
  6.  
  7. //invocar closure "doble"
  8. def numero=doble(5)
  9. println("el doble de 5 es "+numero)
  10. // también puede escribirse println "el doble de 5 es ${numero}"
  11.  

3. Ahora un closure con dos parámetros.

  1.  
  2. def var="Bienvenido"
  3. // imprime el valor de var y el parámetro que le envie el usuario
  4. def msg1={it -> println "${var} ${it}"}
  5. //invocamos el closure, debe salir el mensaje "Bienvenido mundo"
  6. msg1("mundo")
  7.  

4. Closure más complejo, recibe un método como parámetro.

  1.  
  2. //defino un closure con dos parámetros
  3. def otro={metodo, parametro -> metodo(parametro)}
  4. //ahora defino dos closure que reciben un solo parámetro
  5. def inicio={it -> println "Hola ${it}"}
  6. def fin={it -> println "Adios ${it}"}
  7. //invoco el closure "otro"
  8. otro(inicio,"Fernando")
  9. otro(fin,"Fernando")
  10.  

5. Mandamos una lista a un closure.

  1.  
  2. //defino una lista
  3. def lista=["Andrea","Fernando","Antonio","Lucero","Veronica"]
  4. //uso el closure "inicio"
  5. println "\n"
  6. lista.each inicio
  7.  

6. Ejemplo con closures y diccionarios.

  1.  
  2. //defino el diccionario
  3. def dicc=['Fernando':31,'Veronica':27,'María':43,'Yezmin':26,'Horacio':15]
  4. def suma=0
  5. //defino el closure
  6. def edadTotal={ x ->
  7. x.each{
  8. suma+=it.value
  9. // println("obtener valor: "+it.value+ " obtener llave o identificador: "+it.key)
  10. }
  11. println("Suma total de edades: "+suma)
  12. }
  13. //invoco el closure
  14. edadTotal(dicc)
  15.  

Para ejecutar este archivo pueden teclear desde la consola de comandos:

groovy Closures.groovy

También se puede probar el código mediante la consola groovy:

groovyconsole Closures.groovy

Si quieres puedes leer más información sobre los Closures de Groovy en http://groovy.codehaus.org/Closures

Difunde el Conocimiento

Si te ha gustado el artículo o te ha sido de utilidad, no dejes de compartirlo con tus amigos en las redes sociales... Te estaremos muy agradecidos. :-D

¿Algo que nos quieras comentar?

Déjanos tu comentario, no te preocupes que tu email no será publicado

*

*