Llevo unos días probando AS3 con Flex SDK y Flash CS3. Ya iba siendo hora. He aprovechado las vacaciones para echarle un vistazo y después de unos días de uso encuentro importantes mejoras con respecto a AS2:
- La principal y más importante es la posibilidad de crear instancias de MovieClip (y derivados) en tiempo de ejecución sin tener que hacer malabarismos.
- Usa espacios de nombres (packages) para las clases.
- Está disponible un compilador externo, de manera que no hay que depender más de herramientas de terceros para generar nuestros SWF.
- Ya no es necesario esperar al evento “load” para acceder a las propiedades de una clase asociada a un MovieClip de la biblioteca.
- Incluye la clase Event de forma nativa.
Es lógico creer que AS3 permita cierta flexibilidad, ya que va a ser utilizado por diseñadores con pocos conocimientos de programación. Sin embargo creo que es mucho más sano el trabajo de cualquiera, aunque sea mínimo y casual, si se hace con un lenguaje bien estructurado, y con una lógica bien definida. Se están ganado puntos para el futuro.
He aquí una lista de los problemas principales a nivel estructural del lenguaje. Según mi parecer, claro:
- AS3 no tiene clases abstractas, ni métodos abstractos o virtuales.
- AS3 no ofrece herencia de los miembros estáticos.
- AS3 sigue teniendo tipado débil. Permite acceder a propiedades”fantasmas” de los objetos “Object”
- AS3 no admite sobrecargas de métodos. Esto es especialmente ruinoso, porque hay que hacer uso de constructores que acepten “Object” como parámetros, o peor aún, el tipo “*”. Se puede también hacer uso de los valores por defecto de los parámetros, aunque es muy limitado.
- AS3 a veces asigna por referencia y otras por copia. No queda muy claro cuándo usa qué.
- AS3 no soporta constructores privados o protegidos. Adiós, Singleton, Adiós.
Por otro lado tenemos pequeños detalles o bugs. No son problemas estructurales, sino de cómo se han creado las clases que forman las bibliotecas de Flash o de fallos del reproductor:
- Para acceder a los eventos de un objeto Loader, hay que “escuchar” los eventos de un atributo suyo (contentLoaderInfo), a persar de que Loader hereda de EventDispatcher.
- Los delegados han sido eliminados, y han ampliado el funcionamiento de los eventos, enterrando la posibilidad de pasar delegados como parámetros de funciones, y pasar parámetros a los delegados. (Suena raro, pero es así)
- Hay un bug en la propiedad filters de un MovieClip. Al crearse el MovieClip es un array vacío, que debería permitir agregar nuevos filtros con “push”, sin embargo no lo permite. Debe asignarse a una nueva matriz para que funcione correctamente
- Para dibujar algo sobre en Sprite tienes que acceder a una propiedad “graphics”, que en realidad no es otra cosa que una biblioteca de funciones para poder dibujar. Quizá hubiera sido mejor integrar esos métodos en la clase Sprite, y/o hacerlos estáticos.
PD: La lista irá creciendo según vaya encontrando bondades y defectos.