On Wed, Nov 28, 2007 at 08:53:51PM +0100, Andorogynus ! wrote:
> Yo estoy aprendiendo Javascript, pero hasta ahora nunca vi este tipo de
> contrucciones.

Javascript es un lenguaje en donde las funciones son "ciudadanos de
primer orden", como en Python, Ruby o los lenguajes funcionales puros.

Si nunca usaste uno de esos lenguajes, o nunca viste estas
construcciones en esos lenguajes, no las debes haber visto nunca.


> Que significa asignar funciones anonimas a variables, y todas ellas dentro
> de dos parejas de parentesis ()() ?

Vamos por partes:

  var xxx = function() { codigo };

Eso hace que xxx sea una funcion, con el codigo dado ahi. La podes
llamar como xxx(), o pasarla o devolverla como si fuera una variable
mas (de hecho lo es, solo que hace referencia a una funcion).

Es simplemente otra forma de definir una funcion llamada xxx.


Ahora, esto:

   ( function() { codigo } ) ();

es lo mismo que:

   var xxx = function() { codigo };
   xxx()

con la diferencia de que no usas una variable para almacenar la funcion,
sino que la creas, la llamas, y listo. El garbage collector la va a
eliminar luego de que la hayas usado (en este caso llamandola, tambien
podrias haberla pasado como parametro o haberla devuelto), porque no va
a haber ninguna variable que la referencie; por eso se las llama
"funciones anonimas".


> Creo que la estructura aproximada de ese ejemplo es asi:
> 
> ( function()
>   {
>     var xxx = function() { codigo }
>     var yyy = function() { codigo }
>     yahoo.llamadafuncion();
>   }
> ) ();

Con lo de arriba, esto se deberia entender mejor. Estas definiendo una
funcion anonima y llamandola, y adentro definiendo otras dos funciones y
llamando a una tercera.

Me explico?


> Con que se come ? Digo, como se le llama a este tipo de construcciones en JS
> y porque los ejemplos de YUI
> lo usan, en lugar de usar el modelo mas 'tradicional' de una funcion debajo
> de otra ?

Muchas, muchas, muuuuuuuuuchas veces, poder armar y usar funciones de
esta manera hacer que el codigo quede mucho mas prolijo, agradable,
mantenible y general. A veces tambien puede quedar chanchurriento y
complicado sin motivo, en este sentido es igual que todas las cosas que
nos dejan hacer los lenguajes: hay que saber cuando usarlas, y cuando no.


Por ultimo, si te interesan estas cosas, es una obligacion moral de mi
parte recomendarte la materia "Teoria de lenguajes" de Rosita.

Para mi es realmente un crimen que este tipo de cosas solo se vean en
materias optativas de ese estilo, y no en las obligatorias.


Gracias,
                Alberto

_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion

Responder a