29 sept 2013

Closures en Go

Animado por +Antonio Ognio durante un viaje Lima-Ica en el que nos encontramos por azar, estoy dando mis primeros pasos en Go, el lenguaje de programación de la familia de C creado por Google.
En eso de revisar la sintaxis y echar algunas líneas de código ultra básico, llegué al tema de "closures". Googleando sobre el asunto, llegué a escribir este ejemplo que creo sirve para explicar bastante bien el como se implementan en Go:

En Go, los closures se implementan a través de funciones anónimas. En el ejemplo, func() int indica que estamos declarando una función (1) sin nombre, por lo tanto anónima, (2) sin parámetros, por los paréntesis vacios, y (3) que retorna un entero.
En el cuerpo de la función estamos manipulando la variable a cuya declaración pertenece al ámbito en el que se está declarando la función anónima, a no es una variable local a la función.

También podemos ver que la función anónima ha sido asignada a la variable double, es decir double se comporta con un apuntador a la función anónima y nos servirá para invocar la función que, como dije, no tiene nombre.

Finalmente, invocamos a la función a través de la variable double y vemos el efecto en los comentarios. Los resultados nos indican claramente que la función anónima guarda una referencia a la variable a, incluso luego que es invocada por primera vez y ha retornado.

La promesa del lenguaje es que ésta referencia seguirá siendo válida en tanto sea posible invocar a la función anónima.

Espero que esta breve explicación les resulte de utilidad, yo seguiré explorando este lenguaje que me parece muy interesante sobre todo por la sintaxis parecida al C y porque contiene muchos conceptos modernos de los cuales espero escribir pronto.