versiones script para comandos codigos caracteristicas animate acciones actionscript inline-method

para - comandos de actionscript



Uso de cierres en línea/delegados de función en Actionscript (3)

¿Por qué los cierres en línea se usan tan poco en Actionscript? Son muy poderosos y creo que son bastante legibles. Casi nunca veo a nadie usándolos así que tal vez estoy buscando el código equivocado. Google los usa en su API de Google Maps para muestras de Flash, pero creo que ese es el único lugar donde los he visto.

Los prefiero porque tienes acceso a variables locales en el ámbito que los define y mantienes la lógica en un método y no terminas con muchas funciones para las cuales tienes que encontrar un nombre.

¿Hay alguna trampa de usarlos? Funcionan más o menos de la misma manera que en C #.

De hecho, acabo de descubrir que AS3 los admite, y estoy bastante molesto porque pensé que había leído que estaban obsoletos en AS #. ¡Así que estoy de vuelta a usarlos!

private function showPanel(index:int):void { _timer = new Timer(1000, 1); _timer.addEventListener(TimerEvent.TIMER, function(event:Event):void { // show the next panel showPanel(index++); });


Encontré lo que originalmente me hizo NO querer hacer esto, pero había olvidado los detalles:

http://livedocs.adobe.com/flex/3/html/16_Event_handling_6.html#119539

(Esto es lo que mencionó Mitch, en cuanto a que la palabra clave ''this'' está fuera del alcance)

Entonces esa es la respuesta de Adobe, sin embargo, es mucho más probable que necesite referirme a variables locales que ''esto''.

¿Cómo interpretan los demás la recomendación de Adobe?


Lo más importante que hay que tener en cuenta es que a menudo ''esto'' no se define en el cierre en línea. A veces puede establecer un ''esto'', pero no siempre es el correcto ''esto'' que tendría que establecer, dependiendo de cómo los esté usando.

Pero diría que la mayor parte del código Flex en el que he trabajado ha tenido cierres en línea de forma desenfrenada en todo el código, ya que las devoluciones de llamadas son la única forma de hacer el trabajo y, a menudo, no es necesario llevar a cabo una función separada .

Algunas veces, cuando la función anidada llega a ser demasiado, la separaré ligeramente con variables de función en la función; esto me ayuda a organizar un poco al darles etiquetas a las funciones pero manteniendo algunas de las características de los cierres en línea (acceso a las variables locales, por ejemplo).

Espero que esto ayude.


Un problema adicional es que la recolección de basura se rompe cuando se trata de cierres (al menos en Flash 9). La primera instancia de un cierre dado (desde un punto de vista léxico) nunca será recogida de basura, junto con cualquier otra cosa mencionada por el cierre en la cadena de alcance.