20
Nov

Llegan las closures a Java: el mundo se va a acabar

james_goslingcLa repanocha. Ha llegado Mark Reinhold y, de improviso y sin avisar, ha anunciado en la Devoxx que la nueva versión 1.7 del lenguaje java soportará el uso de closures.

Madre mía… madre mía ¿Pero qué es eso de closures? Aunque los chicos de Groovy y Ruby que están en la onda y dominan el flow saben de que va el tema, a los arcaicos programadores-integristas de java, seguidores -como yo- de la Iglesia de San James Gosling de los Últimos Días, nos debería sonar a chino mandarino. En cualquier caso, debe de ser algo im-por-tan-tí-si-mo porque tiene a toda la comunidad revolucionada y hace que el mismísimo Abraham Otero de jH publique la noticia con nada menos que tres admiraciones !!! Habrá que investigarlo.

Pues bien, las closures son, ni más ni menos, que bloques de código que, una vez definidos, puedes asignar a una  o más variables y ejecutar posteriormente. Por supuesto, estos bloques pueden recibir parámetros.

Antes de nada, hay que reconocer que la frase anterior es bastante densa, así que vamos a parar un momento para ver un código de ejemplo que nos ayude a comprenderla. De todos los ejemplos del mundo mundial de la vida vital que he podido encontrar en la red sobre closures, este pedazo de javascript me parece el más sencillo y aclaratorio:

function localise(greeting) {
return function(name) { alert(greeting + ‘ ‘ + name };
}
var english = localise(‘Hello’);
var french = localise(‘Bonjour’);
english(‘kartik’);                                 // alert box with “Hello kartik”
french(‘kartik’)                                   // alert box with “Bonjour kartik”

Se que más de uno estará pensando “¿y para qué quiero yo utilizar esta memez?” No os quedéis en la superficie, pensad en las posibilidades. Por ejemplo, utilizad esas variables que apuntan a bloques de código como parámetros de un segundo método.

login(name, password, english) // Devuelve un saludo en inglés si el usuario se autentica

rodtequeremosSi alguno se ha quedado con cara de Bugs Bunny y farfullando un “¿esto es todo amigos?” que no se preocupe porque, realmente, esto es todo amigos. Ni el mundo se va acabar ni de repente se van a resolver de forma mágica todos vuestros problemas. Vuestro Jefe de Proyecto no va a estar más contento porque las utilicéis, vuestra empresa no os va a pagar más y, desde luego, no vais a tener más éxito con las mujeres, pero puede que os permitan desarrollar vuestro trabajo mejor y más rápido.

Las closures son una herramienta más, que le da más potencia al lenguaje. Ni más, ni menos.

¿Qué se os ocurren mil y una formas de hacer lo mismo con otras herramientas de java como las clases internas o las interfaces? Pues, también. Pero no hay que ser más papistas que el Papa. El propio Gosling escribió en su blog que java no es algo que deba permanecer inmutable sino un lenguaje vivo que va evolucionando y reconoce que las closures se quedaron fuera de las primeras versiones más por problemas de tiempos que por otra cosa.

Le podemos dar más vueltas y buscar una explicación más exhaustiva o hablar sobre la posibilidad de utilizar variables locales que toman valor en la definición de la closure y no en la ejecución, pero no es el objetivo de este artículo.

Por último, advertiros de que podéis sorprenderos con un batiburrillo de siglas asociadas a esto de las closures como BGGA o CICE. No os preocupéis, solo sirven para identificar las propuestas de implementación que ha hecho determinada gente. Así, por ejemplo, BGGA surge de los apellidos del grupo de amigos que se reúnen para tomar cervezas y hablar de closures (Gilad Bracha, Neal Gafter, James Gosling y Peter von der Ahé).

Las closures llegarán con java 7. Bienvenidas sean, las estamos esperando.

RECURSOS

Closures en Groovy: http://groovy.codehaus.org/Closures

Excelente articulo sobre el tema en Javaworld: http://bit.ly/29e6Ih

A James Gosling le gustan las closures: http://blogs.sun.com/jag/entry/closures

Otro sitio donde explican las closures de forma sencilla: http://bit.ly/1txbqG

Última Propuesta BGGA: http://www.javac.info/



free blog themes
free blog themes