# ActionScript

Adobe ActionScript (fecha de lanzamiento en 1997) es el lenguaje de programación de la plataforma Adobe Flash. Originalmente desarrollado como una forma para que los desarrolladores programen de forma más interactiva. La programación con ActionScript permite mucha más eficiencia en las aplicaciones de la plataforma Flash para construir animaciones de todo tipo, desde simples a complejas, ricas en datos e interfaces interactivas.
La versión más extendida actualmente es Action Script 3.0, que significó una mejora en el manejo de programación orientada a objetos al ajustarse mejor al estándar ECMA-262 y es utilizada en las últimas versiones de Adobe Flash y Flex y en anteriores versiones de Flex. Desde la versión 2 de Flex viene incluido ActionScript 3, el cual mejora su rendimiento en comparación con sus antecesores, además de incluir nuevas características como el uso de expresiones regulares y nuevas formas de empaquetar las clases.

## Estructura

Flash está compuesto por objetos, con su respectiva ruta dentro del swf. Cada uno de éstos en ActionScript pertenece a una clase (MovieClip, botones, Vectores (Arrays), etc.), que contiene Propiedades y Métodos o Funciones.
* Propiedades: Dentro del archivo raíz de la clase, están declaradas como variables (alpha, useHandCursor, length,...).
* Métodos o Funciones: Dentro del archivo raíz de la clase, están declaradas como funciones (stop, gotoAndPlay, getURL,...).

## Tipos

Algunas clases de ActionScript son:
* Accessibility (nivel superior)
* Array (instancias)
* Boolean (instancias)
* Button (instancias)
* Capabilities (nivel superior)
* Color (instancias)
* ContextMenu (instancias)
* ContextMenuItems (instancias)
* Date (instancias)
* Error (instancias)
* Key (nivel superior)
* LoadVars (instancias)
* Math (nivel superior)
* Mouse (nivel superior)
* MovieClip (instancias)
* MovieClipLoader (instancias)
* NetConnection (instancias)
* NetStream (instancias)
* Number (nivel superior)
* Object (instancias)
* PrintJob (instancias)
* Selection (nivel superior)
* Sound (instancias)
* Stage (nivel superior)
* String (instancias)
* StyleSheet (instancias)
* System (nivel superior)
* TextField (instancias)
* TextFormat (instancias)
* XML (instancia)
* XMLSocket

## ActionScript 3.0

ActionScript 3.0 ofrece un modelo de programación robusto que resulta familiar a los desarrolladores con conocimientos básicos sobre programación orientada a objetos. Algunas de las principales funciones de ActionScript 3.0 son:
* Una nueva máquina virtual ActionScript, denominada AVM2, que utiliza un nuevo conjunto de instrucciones de código de bytes y proporciona importantes mejoras de rendimiento.
* Una base de código de compilador más moderna, que se ajusta mejor al estándar ECMAScript (ECMA 262) y que realiza mejores optimizaciones que las versiones anteriores del compilador.
* Una interfaz de programación de aplicaciones (API) ampliada y mejorada, con un control de bajo nivel de los objetos y un auténtico modelo orientado a objetos.
* Un núcleo del lenguaje basado en el borrador de especificación del lenguaje ECMAScript (ECMA-262) edición 4.
* Una API XML basada en la especificación de ECMAScript para XML (E4X) (ECMA-357 edición 2). E4X es una extensión del lenguaje ECMAScript que añade XML como un tipo de datos nativo del lenguaje.
* Un modelo de eventos basado en la especificación de eventos DOM (modelo de objetos de documento) de nivel 3.

### Mejoras de la versión 3.0 respecto a sus predecesoras

ActionScript 3.0 aumenta las posibilidades de creación de scripts de las versiones anteriores de ActionScript. Se ha diseñado para facilitar la creación de aplicaciones más complejas, con conjuntos de datos voluminosos y bases de código reutilizables y orientadas a objetos. Aunque no se requiere para el contenido que se ejecuta en Adobe Flash Player 9, ActionScript 3.0 permite introducir unas mejoras de rendimiento que sólo están disponibles con AVM2, la nueva máquina virtual. El código ActionScript 3.0 puede ejecutarse con una velocidad diez veces mayor que el código ActionScript heredado.
La versión anterior de la máquina virtual ActionScript (AVM1) ejecuta código ActionScript 1.0 y ActionScript 2.0. Flash Player 9 admite AVM1 por compatibilidad con contenido existente y heredado de versiones anteriores.

#### Novedades

A continuación se citan algunas de las nuevas funcionalidades y ventajas que ofrece esta nueva versión de ActionScript en comparación con sus anteriores versiones. En verdad es más sofisticada en cuanto su estilo y adaptación para otras.

#### Excepciones en tiempo de ejecución

ActionScript 3.0 notifica más situaciones de error que las versiones anteriores de ActionScript. Las excepciones en tiempo de ejecución se utilizan en situaciones de error frecuentes y permiten mejorar la depuración y desarrollar aplicaciones para gestionar errores de forma robusta. Los errores en tiempo de ejecución pueden proporcionar trazas de pila con la información del archivo de código fuente y el número de línea. Esto permite identificar rápidamente los errores.

#### Tipos de tiempo de ejecución

Mientras que en ActionScript 2.0, las anotaciones de tipos eran principalmente una ayuda para el desarrollador; en tiempo de ejecución, se asignaban los tipos dinámicamente a todos los valores. En ActionScript 3.0, la información de tipos se conserva en tiempo de ejecución y se utiliza con diversos fines. Flash Player 9 realiza la comprobación de tipos en tiempo de ejecución, lo que mejora la seguridad de tipos del sistema. La información de tipos también se utiliza para especificar en representaciones nativas de la máquina, lo que mejora el rendimiento y reduce el uso de memoria.

#### Clases cerradas

ActionScript 3.0 introduce el concepto de clases cerradas. Una clase cerrada posee únicamente el conjunto fijo de propiedades y métodos definidos durante la compilación; no es posible añadir propiedades y métodos adicionales; aunque sí se puede usándolas dinámicas. Cerrarlas permite realizar una comprobación más estricta en tiempo de compilación, lo que aporta una mayor solidez a los programas. También mejora el uso de memoria, pues no requiere una tabla hash interna para cada instancia de objeto.
Además, es posible utilizar clases dinámicas mediante la palabra clave dynamic. Todas las clases de ActionScript 3.0 están cerradas de forma predeterminada, pero pueden declararse como dinámicas con la palabra clave dynamic.

#### Cierres de métodos

ActionScript 3.0 permite que un cierre de método recuerde automáticamente su instancia de objeto original. Esta función resulta útil en la gestión de eventos. En ActionScript 2.0, los cierres de métodos no recordaban la instancia de objeto de la que se habían extraído, lo que provocaba comportamientos inesperados cuando se llamaba al cierre de método.

#### ECMAScript for XML (E4X)

ActionScript 3.0 implementa ECMAScript for XML (E4X), recientemente estandarizado como ECMA-357. E4X ofrece un conjunto fluido y natural de construcciones del lenguaje para manipular XML. Al contrario que las API de análisis de XML tradicionales, XML con E4X se comporta como un tipo de datos nativo del lenguaje. E4X optimiza el desarrollo de aplicaciones que manipulan XML, pues reduce drásticamente la cantidad de código necesario.

#### Expresiones regulares

ActionScript 3.0 ofrece compatibilidad nativa con expresiones regulares, que permiten encontrar y manipular cadenas rápidamente.