stringtranslate.com

Script de acción

ActionScript es un lenguaje de programación orientado a objetos desarrollado originalmente por Macromedia Inc. (posteriormente adquirida por Adobe ). Está influenciado por HyperTalk , el lenguaje de scripting para HyperCard . [3] Ahora es una implementación de ECMAScript (lo que significa que es un superconjunto de la sintaxis y semántica del lenguaje más conocido como JavaScript ), aunque originalmente surgió como un lenguaje hermano, siendo ambos influenciados por HyperTalk . El código ActionScript generalmente se convierte a formato de bytecode mediante un compilador .

ActionScript se utiliza principalmente para el desarrollo de sitios web y software destinados a la plataforma Adobe Flash , y originalmente se utilizaba en páginas web en forma de archivos SWF integrados .

ActionScript 3 también se utiliza con el sistema Adobe AIR para el desarrollo de aplicaciones de escritorio y móviles. El lenguaje en sí es de código abierto , ya que su especificación se ofrece de forma gratuita [4] y están disponibles tanto un compilador de código abierto (como parte de Apache Flex ) como una máquina virtual de código abierto ( Tamarin ).

ActionScript también se utilizó con Scaleform GFx para el desarrollo de interfaces de usuario de videojuegos tridimensionales y pantallas de visualización frontal .

Descripción general

ActionScript fue diseñado inicialmente para controlar animaciones vectoriales bidimensionales simples realizadas en Adobe Flash (anteriormente Macromedia Flash). Inicialmente enfocado en la animación, las primeras versiones del contenido Flash ofrecían pocas funciones de interactividad, por lo que tenían una capacidad de creación de scripts muy limitada. Las versiones posteriores agregaron funcionalidad que permite la creación de juegos basados ​​en la web y aplicaciones web enriquecidas con medios de transmisión (como video y audio). Hoy, ActionScript es adecuado para el desarrollo de escritorio y móvil a través de Adobe AIR; se utiliza en algunas aplicaciones de base de datos y en robótica básica como en Make Controller Kit .

Flash MX 2004 introdujo ActionScript 2.0, un lenguaje de programación más adecuado para el desarrollo de aplicaciones Flash. A menudo es posible ahorrar tiempo al programar algo en lugar de animarlo, lo que normalmente también permite un mayor nivel de flexibilidad durante la edición.

Desde la llegada de la versión alfa de Flash Player 9 (en 2006), se ha publicado una versión más reciente de ActionScript, ActionScript 3.0. Esta versión del lenguaje está pensada para compilarse y ejecutarse en una versión de la máquina virtual Tamarin , anteriormente ActionScript Virtual Machine 2, que también fue completamente reescrita (denominada AVM2). [5] Debido a esto, el código escrito en ActionScript 3.0 generalmente está destinado a Flash Player 9 y versiones posteriores, y no funcionará en versiones anteriores. Al mismo tiempo, ActionScript 3.0 se ejecuta hasta 10 veces más rápido que el código ActionScript heredado debido a las mejoras del compilador Just-In-Time . [6]

Las bibliotecas Flash se pueden utilizar con las capacidades XML del navegador para reproducir contenido enriquecido en el navegador. Esta tecnología se conoce como Flash y XML asíncronos, al igual que AJAX. Adobe ofrece su línea de productos Flex para satisfacer la demanda de aplicaciones web enriquecidas creadas en el entorno de ejecución Flash, con comportamientos y programación realizados en ActionScript. ActionScript 3.0 constituye la base de la interfaz de programación de aplicaciones ( API ) Flex 2.

Historia

ActionScript comenzó como un lenguaje de programación orientado a objetos para la herramienta de creación de Flash de Macromedia , desarrollada posteriormente por Adobe Systems como Adobe Flash. Las tres primeras versiones de la herramienta de creación de Flash proporcionaban funciones de interactividad limitadas. Los primeros desarrolladores de Flash podían adjuntar un comando simple, llamado "acción", a un botón o un marco. El conjunto de acciones consistía en controles de navegación básicos, con comandos como "reproducir", "detener", "obtenerURL" y "gotoAndPlay".

Con el lanzamiento de Flash 4 en 1999, este sencillo conjunto de acciones se convirtió en un pequeño lenguaje de programación. Las nuevas capacidades introducidas para Flash 4 incluían variables , expresiones , operadores , instrucciones if y bucles . Aunque internamente se hacía referencia a ellas como "ActionScript", el manual del usuario y los documentos de marketing de Flash 4 seguían utilizando el término "acciones" para describir este conjunto de comandos.

Cronología por versión del jugador

Línea de tiempo por versión de ActionScript

2000-2004: ActionScript "1.0"

Con el lanzamiento de Flash 5 en septiembre de 2000, las "acciones" de Flash 4 se mejoraron una vez más y se denominaron "ActionScript" por primera vez. [12] Esta fue la primera versión de ActionScript con influencias de JavaScript y el estándar ECMA-262 (tercera edición), que admitía el modelo de objetos de dicho estándar y muchos de sus tipos de datos principales . Las variables locales se pueden declarar con la declaración var y también se pueden crear funciones definidas por el usuario con paso de parámetros y valores de retorno . Cabe destacar que ActionScript ahora también se puede escribir con un editor de texto en lugar de ensamblarse eligiendo acciones de listas desplegables y controles de cuadros de diálogo. Con el siguiente lanzamiento de su herramienta de creación, Flash MX, y su reproductor correspondiente, Flash Player 6 , el lenguaje permaneció esencialmente sin cambios; solo hubo cambios menores, como la adición de la declaración switch y el operador de "igualdad estricta" ( === ), que lo acercó a ser compatible con ECMA-262 . Dos características importantes de ActionScript que lo distinguen de las versiones posteriores son su sistema de tipos flexibles y su dependencia de la herencia basada en prototipos . La herencia basada en prototipos se refiere a la capacidad de una variable para contener cualquier tipo de datos. Esto permite un desarrollo rápido de scripts y es particularmente adecuado para proyectos de scripts a pequeña escala. La herencia basada en prototipos es el mecanismo de ActionScript 1.0 para la reutilización de código y la programación orientada a objetos. En lugar de una palabra clave de clase que define las características comunes de una clase , ActionScript 1.0 utiliza un objeto especial que sirve como "prototipo" para una clase de objetos. Todas las características comunes de una clase se definen en el objeto prototipo de la clase y cada instancia de esa clase contiene un vínculo a ese objeto prototipo.

2003–2006: ActionScript 2.0

La siguiente revisión importante del lenguaje, ActionScript 2.0, se introdujo en septiembre de 2003 con el lanzamiento de Flash MX 2004 y su reproductor correspondiente, Flash Player 7. En respuesta a la demanda de los usuarios de un lenguaje mejor equipado para aplicaciones más grandes y complejas, ActionScript 2.0 incluyó comprobación de tipos en tiempo de compilación y sintaxis basada en clases , como las palabras clave class y extends . Si bien esto permitió un enfoque de programación orientada a objetos más estructurado, el código se compilaría en el bytecode de ActionScript 1.0 , lo que también permitió su uso en el Flash Player 6 anterior. En otras palabras, la sintaxis de herencia basada en clases era una capa sobre el sistema existente basado en prototipos. Con ActionScript 2.0, los desarrolladores podían restringir las variables a un tipo específico agregando una anotación de tipo para que los errores de falta de coincidencia de tipos se pudieran encontrar en tiempo de compilación . ActionScript 2.0 también introdujo una sintaxis de herencia basada en clases para que los desarrolladores pudieran crear clases e interfaces, de forma muy similar a como lo harían en lenguajes basados ​​en clases como Java y C++ . Esta versión se ajustaba parcialmente a la especificación preliminar de la cuarta edición de ECMAScript .

2006–2020: ActionScript 3.0

En junio de 2006, ActionScript 3.0 debutó con Adobe Flex 2.0 y su reproductor correspondiente, Flash Player 9. ActionScript 3.0 fue una reestructuración fundamental del lenguaje, tanto que utiliza una máquina virtual completamente diferente . Flash Player 9 contiene dos máquinas virtuales, AVM1 para código escrito en ActionScript 1.0 y 2.0, y AVM2 para contenido escrito en ActionScript 3.0. ActionScript 3.0 agregó soporte limitado para aceleración de hardware ( DirectX , OpenGL ).

La actualización del lenguaje introdujo varias características nuevas:

Flash Lite

AIRE

Adobe AIR es compatible con ActionScript, además de con algunos contenidos ampliados, como el motor Stage3D desarrollado por Adobe. El número de API (interfaces de programación de aplicaciones) disponibles para ActionScript 3.0 también ha aumentado drásticamente.

Sintaxis

El código ActionScript es de formato libre y, por lo tanto, puede crearse con la cantidad o el estilo de espacios en blanco que desee el autor. La sintaxis básica se deriva de ECMAScript .

ActionScript 2.0

El código siguiente, que funciona en cualquier reproductor compatible, crea un campo de texto con profundidad 0, en la posición (0, 0) de la pantalla (medida en píxeles ), es decir, 100 píxeles de ancho y alto. Luego, el parámetro se establece en la cadenatext " Hola, mundo " y se muestra automáticamente en el reproductor:

createTextField ( "saludar" , 0 , 0 , 0 , 100 , 100 ); saludar.text = " Hola , mundo" ;       

Al escribir archivos de clase externos de ActionScript 2.0, el ejemplo anterior podría escribirse en un archivo llamado Greeter.as como se muestra a continuación.

clase com . ejemplo . Greeter extiende MovieClip { función pública Greeter () { var txtHello : TextField = this . createTextField ( "txtHello" , 0 , 0 , 0 , 100 , 100 ); txtHello . text = "Hola, mundo" ; } }                     

ActionScript 3.0

ActionScript 3.0 tiene una sintaxis similar a ActionScript 2.0, pero un conjunto diferente de API para crear objetos. Compare el script que aparece a continuación con la versión anterior de ActionScript 2.0:

var txtHola : CampoDeTexto = new CampoDeTexto (); txtHola .text = " Hola Mundo" ; this .addChild ( txtHola ) ;       

Los programas mínimos de ActionScript 3.0 pueden ser algo más grandes y complicados debido a la mayor separación del lenguaje de programación y el entorno de desarrollo integrado (IDE) Flash.

Supongamos que el siguiente archivo es Greeter.as :

paquete com.example { importar flash.text.TextField ; importar flash.display.Sprite ;      clase pública Greeter extiende Sprite { función pública Greeter ( ) { var txtHello : TextField = new TextField (); txtHello.text = " Hola mundo" ; addParent ( txtHello ); } } }                    

ActionScript 3 también se puede utilizar en archivos MXML cuando se utiliza el marco Flex de Apache :

<?xml version="1.0" encoding="utf-8"?> <s:Aplicación xmlns:fx= "http://ns.adobe.com/mxml/2009" xmlns:s= "biblioteca://ns.adobe.com/flex/mx/polysylabi" xmlns:mx= "biblioteca://ns.adobe.com/flex/mx" layout= "vertical" creationComplete= "initApp()" >      <fx:Script>  <![CDATA[ public function initApp (): void { // Imprime nuestro mensaje "¡Hola, mundo!" en el título title . text = " ¡Hola, mundo!" ; } ]]> </fx:Script>            <s:Etiqueta id= "título" fontSize= "54" fontStyle= "negrita" /> </s:Aplicación>    

Estructuras de datos

Tipos de datos

ActionScript se compone principalmente de tipos de datos "fundamentales" o "simples" que se utilizan para crear otros tipos de datos. Estos tipos de datos son muy similares a los tipos de datos de Java . Dado que ActionScript 3 fue una reescritura completa de ActionScript 2, los tipos de datos y sus herencias han cambiado.

Tipos de datos de nivel superior de ActionScript 2

Tipos de datos complejos de ActionScript 2

Existen otros tipos de datos "complejos". Estos consumen más procesador y memoria y constan de muchos tipos de datos "simples". Para AS2, algunos de estos tipos de datos son:

Tipos de datos primitivos (principales) de ActionScript 3 [13]

ActionScript 3: algunos tipos de datos complejos [13]

Uso de tipos de datos

La sintaxis básica es:

var nombreVariable : TipoVariable = new TipoVariable ( parámetro1 , parámetro2 , ... , parámetroN );        

Entonces, para crear un objeto vacío:

var miObjeto : Objeto = nuevo Objeto ();     

O, de manera informal:

var miObjeto = {};   

Algunos tipos se instalan automáticamente:

var myString : String = "¡Hola Wikipedia!" ; // Esto establecería automáticamente la variable como una cadena. var myNumber : Number = 5 ; // Esto haría lo mismo para un número. var myObject : Object = { param1 : "¡Hola!" , param2 : 76 }; // Esto crea un objeto con dos variables. // param1 es una cadena con los datos de "¡Hola!", // y param2 es un número con los datos de 76.                    // Esta es la sintaxis para crear automáticamente un Array. var myArray : Array = [ 5 , "Hello!" , { a : 5 , b : 7 }]; // Crea un Array con 3 variables. // La primera (0) es un número con el valor de 5, // la segunda (1) es una cadena con el valor de "¡Hola!", // y la tercera (2) es un objeto con { a: 5, b: 7 }.           

A diferencia de algunos lenguajes orientados a objetos, ActionScript no hace distinción entre tipos primitivos y tipos de referencia . En ActionScript, todas las variables son tipos de referencia. Sin embargo, los objetos que pertenecen a los tipos de datos primitivos, que incluyen Boolean, Number, int, uint y String, son inmutables. [14]

Por lo tanto, si se pasa una variable de un tipo supuestamente primitivo, por ejemplo, un entero, a una función, modificar esa variable dentro de la función no alterará la variable original, ya que se crea un nuevo objeto int dentro de la función. Si se pasa una variable de otro tipo de datos (no primitivo), por ejemplo, XML, a una función, modificar esa variable dentro de la función también alterará la variable original, ya que no se crea ningún objeto XML nuevo.

A algunos tipos de datos se les pueden asignar valores con literales :

var item1 : String = "ABC" ; var item2 : Boolean = true ; var item3 : Number = 12 ; var item4 : Array = [ "a" , "b" , "c" ]; var item5 : Object = { name : "Actionscript" , version : "3.0" }; var item6 : XML = < node >< child /></ node >; // Tenga en cuenta que el XML primitivo no está entre comillas                                 

Una referencia en ActionScript es un puntero a una instancia de una clase. Una referencia almacena la dirección de memoria de un objeto: las operaciones contra referencias seguirán el valor de la referencia a la dirección de memoria del objeto y realizarán la operación sobre ese objeto. En ActionScript, se accede a todos los objetos a través de referencias en lugar de hacerlo directamente.

var item1 : XML = new XML ( "<node><child /></node>" ); var item2 : XML = item1 ; item2 . firstChild . attribute . value = 13 ; // item1 ahora es igual a item2 ya que item2 simplemente apunta a lo que item1 apunta. // Ambos son ahora: // <node><child value="13" /></node>           

Sólo se pueden eliminar las referencias a un objeto mediante la palabra clave "delete". La eliminación de objetos y datos reales la realiza el recolector de elementos no utilizados de Flash Player, que comprueba si existen referencias en el espacio de memoria Flash. Si no se encuentra ninguna (no se hace ninguna otra referencia al objeto huérfano), se elimina de la memoria. Por este motivo, la gestión de memoria en ActionScript requiere una planificación cuidadosa del desarrollo de la aplicación.

var item1 : XML = new XML ( "<node><child /></node>" ); delete item1 ; // Si no hay otra referencia a item1 en ningún otro lugar de la aplicación, // se eliminará en el próximo paso del recolector de basura      

Protección de código

Al igual que la mayoría de los formatos de archivos de código de bytes , los archivos SWF de Flash se pueden descompilar en su código fuente y sus recursos (de manera similar a cómo se pueden descompilar los archivos .NET de Microsoft ). Algunos descompiladores son capaces de reconstruir casi por completo el archivo fuente original, hasta el código real que se utilizó durante la creación (aunque los resultados varían según el caso). [15] [16] [17]

En oposición a los descompiladores, se han introducido ofuscadores de ActionScript , que transforman el código en una forma que rompe la salida del descompilador al tiempo que preserva la funcionalidad y la estructura del programa. Los ofuscadores de mayor calidad implementan transformaciones léxicas como el cambio de nombre de identificadores, la transformación del flujo de control y la transformación de la abstracción de datos, que en conjunto hacen que sea más difícil para los descompiladores generar una salida que pueda ser útil para un ser humano. Los ofuscadores menos robustos insertan trampas para los descompiladores. Dichos ofuscadores hacen que el software del descompilador se bloquee inesperadamente o genere código fuente ininteligible. [ cita requerida ]

Referencias

  1. ^ Nelson, Gary (28 de abril de 2020). "Cómo ActionScript prefiguró a TypeScript". Medium . Consultado el 9 de julio de 2022 .
  2. ^ RFC  4329 (límite compatible con EcmaScript)
  3. ^ "La década perdida de Apple, HyperCard y lo que podría NO haber sido si Apple en aquel entonces fuera como Apple hoy". ZDNet . 17 de abril de 2011. Archivado desde el original el 21 de abril de 2011 . Consultado el 4 de diciembre de 2014 .
  4. ^ "Especificación del lenguaje ActionScript 3". Archivado desde el original el 27 de marzo de 2017. Consultado el 12 de noviembre de 2016 .
  5. ^ Brimelow, Lee (18 de agosto de 2008). «Seis razones para usar ActionScript 3.0». Adobe Systems Incorporated . Consultado el 18 de junio de 2010 .
  6. ^ Grossman, Gary; Huang, Emmy (27 de junio de 2006). «Descripción general de ActionScript 3.0». Adobe Systems Incorporated . Consultado el 18 de junio de 2010 .
  7. ^ "Estándar ECMA-262". Ecma-international.org . Consultado el 22 de abril de 2013 .
  8. ^ Waldemar Horwat, ed. (30 de junio de 2003). «Propuesta de Netscape para ECMAScript 4». Netscape . Archivado desde el original el 11 de julio de 2007. Consultado el 11 de abril de 2019 .
  9. ^ "Flash Player | Adobe Flash Player 11 | Descripción general". Adobe.com. 9 de abril de 2013. Consultado el 22 de abril de 2013 .
  10. ^ "Adobe Labs – Adobe Flash Player 10.1". Labs.adobe.com. Archivado desde el original el 5 de enero de 2010. Consultado el 17 de diciembre de 2009 .
  11. ^ "Notas de la versión de Flash Player 11 y AIR 3 para Adobe Labs" (PDF) . Archivado desde el original (PDF) el 14 de julio de 2011.
  12. ^ "Notas de la versión de Flash Player 11, AIR 3". helpx.adobe.com . Consultado el 7 de octubre de 2016 .
  13. ^ ab "Descripciones de tipos de datos + Documentación de Flash CS3". Archivado desde el original el 2 de noviembre de 2007 . Consultado el 13 de julio de 2007 .
  14. ^ "Flex 3 – Parámetros de función". Livedocs.adobe.com. Archivado desde el original el 12 de febrero de 2009. Consultado el 17 de diciembre de 2009 .
  15. ^ "Revisión de otro descompilador por parte de terceros". Flashmagazine.com. 21 de octubre de 2007. Archivado desde el original el 20 de junio de 2017. Consultado el 22 de abril de 2013 .
  16. ^ "Comentarios de clientes sobre un descompilador de Flash". Topshareware.com . Consultado el 22 de abril de 2013 .
  17. ^ Comentarios de clientes sobre otro producto Flash Archivado el 18 de agosto de 2006 en Wayback Machine .

Enlaces externos