Introducción a ActionScript 3.0

ActionScript

ActionScript es el lenguaje de programación para los entornos de tiempo de ejecución de Adobe® Flash® Player y Adobe® AIR™. Entre otras muchas cosas, activa la interactividad y la gestión de datos en el contenido y las aplicaciones de Flash, Flex y AIR.

ActionScript se ejecuta mediante la máquina virtual ActionScript (AVM), que forma parte de Flash Player y AIR. El código ActionScript suele transformarse en formato de código de bytes mediante el compilador. (Bytecode un tipo de lenguaje que los ordenadores pueden escribir y comprender.) Entre los ejemplos de compiladores se incluyen el incorporado en Adobe® Flash® Professional, en Adobe® Flash® Builder™ y el SDK de Adobe® Flex™. El código de bytes está incorporado en los archivos SWF ejecutados por Flash Player y AIR.

ActionScript 3.0 ofrece un modelo de programación robusto que resultará familiar a los desarrolladores con conocimientos básicos sobre programación orientada a objetos. Algunas de las principales funciones de ActionScript 3.0 que mejoran las versiones anteriores son:

  • Una nueva máquina virtual de 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 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.

  • 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.

Ventajas de ActionScript 3.0

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 muy complejas con conjuntos de datos voluminosos y bases de código reutilizables y orientadas a objetos. ActionScript 3.0 no se requiere para el contenido que se ejecuta en Adobe Flash Player. Sin embargo, permite introducir unas mejoras de rendimiento que sólo están disponibles con AVM2, (la nueva máquina virtual de ActionScript 3.0). 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 y 10 admiten AVM1 por compatibilidad con versiones anteriores.

Novedades de ActionScript 3.0

Aunque ActionScript 2.0 contiene muchas clases y funciones que resultan familiares a los programadores de ActionScript 1.0 y 2.0, la arquitectura y los conceptos de ActionScript 3.0 difieren de las versiones anteriores de ActionScript. ActionScript 3.0 incluye algunas mejoras como, por ejemplo, nuevas funciones del núcleo del lenguaje y una API de mejorada que proporciona un mayor control de objetos de bajo nivel.

Funciones del núcleo del lenguaje

El núcleo del lenguaje está formado por los bloques básicos del lenguaje de programación, como sentencias, expresiones, condiciones, bucles y tipos. ActionScript 3.0 contiene diversas funciones que agilizan el proceso de desarrollo.

Excepciones de tiempo de ejecución

ActionScript 3.0 notifica más situaciones de error que las versiones anteriores de ActionScript. Las excepciones de 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 de 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

En ActionScript 3.0, la información de tipos se conserva en tiempo de ejecución. Esta información se utiliza para realizar una verificación de tipos en tiempo de ejecución, mejorando la seguridad de los tipos del sistema. La información de tipos también se utiliza para especificar variables en representaciones nativas de la máquina, lo que mejora el rendimiento y reduce el uso de memoria. Como comparación, en ActionScript 2.0 las anotaciones de tipos eran principalmente una ayuda para el desarrollador y todos los valores se escribían dinámicamente en tiempo de ejecución.

Clases cerradas

ActionScript 3.0 incluye 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. La incapacidad para cambiar una clase en tiempo de ejecución 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.

Para ver la especificación de E4X publicada por ECMA, visite www.ecma-international.org.

Expresiones regulares

ActionScript 3.0 ofrece compatibilidad nativa con expresiones regulares, que permiten encontrar y manipular cadenas rápidamente. ActionScript 3.0 implementa la compatibilidad con expresiones regulares tal y como se definen en la especificación del lenguaje ECMAScript (ECMA-262) edición 3.

Espacios de nombres

Los espacios de nombres son similares a los especificadores de acceso tradicionales que se utilizan para controlar la visibilidad de las declaraciones (public, private, protected). Funcionan como especificadores de acceso personalizados, con nombres elegidos por el usuario. Los espacios de nombres incluyen un identificador de recursos universal (URI) para evitar colisiones y también se utilizan para representar espacios de nombres XML cuando se trabaja con E4X.

Nuevos tipos simples

ActionScript 3.0 contiene tres tipos numéricos: Number, int y uint. El número representa un número de coma flotante y doble precisión. El tipo int es un entero de 32 bits con signo que permite al código ActionScript aprovechar las capacidades matemáticas de manipulación rápida de enteros de la CPU. Este tipo es útil para contadores de bucle y variables en las que se usan enteros. El tipo uint es un tipo entero de 32 bits sin signo que resulta útil para valores de colores RGB y recuentos de bytes, entre otras cosas. Por el contrario, ActionScript 2.0 únicamente cuenta con un solo tipo numérico, Number.

Funciones de la API

Las API en ActionScript 3.0 contienen muchas de las clases que permiten controlar objetos a bajo nivel. La arquitectura del lenguaje está diseñada para ser mucho más intuitiva que en versiones anteriores. Aunque existen demasiadas clases para analizar detalladamente, algunas diferencias significativas no tienen relevancia.

Modelo de eventos DOM3

El modelo de eventos del modelo de objetos de documento de nivel 3 (DOM3) ofrece una forma estándar para generar y gestionar mensajes de eventos. Este modelo eventos está diseñado para que los objetos de las aplicaciones puedan interactuar y comunicarse, mantener su estado y responder a los cambios. El modelo de eventos de ActionScript 3.0 está diseñado a partir de la especificación de eventos DOM de nivel 3 del World Wide Web Consortium. Este modelo proporciona un mecanismo más claro y eficaz que los sistemas de eventos disponibles en versiones anteriores de ActionScript.

Los eventos y los eventos de error se encuentran en el paquete flash.events. Los componentes de Flash Professional y la arquitectura Flex utilizan el mismo modelo de eventos, de modo que el sistema de eventos está unificado en toda la plataforma Flash.

API de la lista de visualización

La API de acceso a la lista de visualización (el árbol que contiene todos los elementos visuales de una aplicación Flash) se compone de clases para trabajar con elementos visuales simples.

La nueva clase Sprite es un bloque básico ligero, diseñado para ser una clase base para elementos visuales como, por ejemplo, componentes de interfaz de usuario. La clase Shape representa formas vectoriales sin procesar. Es posible crear instancias de estas clases de forma natural con el operador new y se puede cambiar el elemento principal en cualquier momento, de forma dinámica.

La administración de profundidad es automática. Se proporcionan métodos para especificar y administrar el orden de apilación de los objetos.

Gestión de contenido y datos dinámicos

ActionScript 3.0 contiene mecanismos para cargar y gestionar elementos y datos en la aplicación, que son intuitivos y coherentes en toda la API. La clase Loader ofrece un solo mecanismo para cargar archivos SWF y elementos de imagen, y proporciona una forma de acceso a información detallada sobre el contenido cargado. La clase URLLoader proporciona un mecanismo independiente para cargar texto y datos binarios en aplicaciones basadas en datos. La clase Socket proporciona una forma de leer y escribir datos binarios en sockets de servidor en cualquier formato.

Acceso a datos de bajo nivel

Distintas API proporcionan un acceso de bajo nivel a los datos. La clase URLStream proporciona acceso a los datos como datos binarios sin formato mientras se descargan. La clase ByteArray permite optimizar la lectura, escritura y utilización de datos binarios. La API de sonido proporciona control detallado del sonido a través de las clases SoundChannel y SoundMixer. La API de seguridad proporcionan información sobre los privilegios de seguridad de un archivo SWF o contenido cargado, lo que permite gestionar los errores de seguridad.

Trabajo con texto

ActionScript 3.0 contiene un paquete flash.text para todas las API relacionadas con texto. La clase TextLineMetrics proporciona medidas detalladas para una línea de texto en un campo de texto; sustituye al método TextFormat.getTextExtent() en ActionScript 2.0. La clase TextField contiene nuevos métodos interesantes de bajo nivel que pueden ofrecer información específica sobre una línea de texto o un solo carácter en un campo de texto. Por ejemplo, el método getCharBoundaries() devuelve un rectángulo que representa el recuadro de delimitación de un carácter. El método getCharIndexAtPoint() devuelve el índice del carácter en un punto especificado. El método getFirstCharInParagraph() devuelve el índice el primer carácter de un párrafo. Los métodos de nivel de línea son: getLineLength(), que devuelve el número de caracteres en una línea de texto especificada, y getLineText(), que devuelve el texto de la línea especificada. La clase Font proporciona un medio para administrar las fuentes incorporadas en archivos SWF.

Para un control incluso de más bajo nivel sobre el texto, la clases del paquete flash.text.engine conforman Flash Text Engine. Este conjunto de clases proporcionan un control de bajo nivel sobre el texto y están diseñadas para crear componentes y marcos de texto.