stringtranslate.com

script de acción

ActionScript es un lenguaje de programación orientado a objetos desarrollado originalmente por Macromedia Inc. (posteriormente adquirido por Adobe ). Está influenciado por HyperTalk , el lenguaje de programación de HyperCard . [3] Ahora es una implementación de ECMAScript (lo que significa que es un superconjunto de la sintaxis y la semántica del lenguaje más conocido como JavaScript ), aunque originalmente surgió como un hermano, ambos influenciados por HyperTalk . El código ActionScript generalmente se convierte al formato de código de bytes 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 incrustados .

ActionScript 3 también se utiliza con el sistema Adobe AIR para el desarrollo de aplicaciones móviles y de escritorio. El lenguaje en sí es de código abierto en el sentido de 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 visualizaciones frontales .

Descripción general

ActionScript se diseñó inicialmente para controlar animaciones vectoriales bidimensionales simples realizadas en Adobe Flash (anteriormente Macromedia Flash). Inicialmente centradas en la animación, las primeras versiones del contenido Flash ofrecían pocas funciones de interactividad, por lo que tenían una capacidad de secuencias de comandos muy limitada. Las versiones posteriores agregaron funcionalidades que permitían la creación de juegos basados ​​en web y aplicaciones web enriquecidas con medios de transmisión (como video y audio). Hoy en día, ActionScript es adecuado para el desarrollo móvil y de escritorio a través de Adobe AIR; se utiliza en algunas aplicaciones de bases 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 creando un guión en lugar de animarlo, lo que normalmente también permite un mayor nivel de flexibilidad al editar.

Desde la llegada de Flash Player 9 alfa (en 2006), se lanzó una versión más nueva de ActionScript, ActionScript 3.0. Esta versión del lenguaje está destinada a 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 superiores, 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 gracias a las mejoras del compilador justo a tiempo . [6]

Las bibliotecas Flash se pueden utilizar con las capacidades XML del navegador para representar contenido enriquecido en el navegador. Esta tecnología se conoce como Flash asíncrono y XML, muy parecida a AJAX. Adobe ofrece su línea de productos Flex para satisfacer la demanda de aplicaciones web enriquecidas creadas en tiempo de ejecución Flash, con comportamientos y programación realizados en ActionScript. ActionScript 3.0 forma 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 Flash de Macromedia , posteriormente desarrollado por Adobe Systems como Adobe Flash. Las primeras tres versiones de la herramienta de creación 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 marco. El conjunto de acciones eran controles de navegación básicos, con comandos como "reproducir", "detener", "getURL" 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 , sentencias if y bucles . Aunque internamente se denomina "ActionScript", el manual del usuario de Flash 4 y los documentos de marketing continuaron 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 admite el modelo de objetos de dicho estándar y muchos de sus tipos de datos principales . Las variables locales se pueden declarar con la instrucción var y también se pueden crear funciones definidas por el usuario con paso de parámetros y valores de retorno . En particular, ActionScript ahora también se puede escribir con un editor de texto en lugar de ensamblarlo 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 de cambio y el operador de "igualdad estricta" ( === ), lo que lo acercó a ser compatible con ECMA-262 . Dos características importantes de ActionScript que lo distinguen de versiones posteriores son su sistema de tipos flexibles y su dependencia de la herencia basada en prototipos . La escritura flexible se refiere a la capacidad de una variable para contener cualquier tipo de datos. Esto permite un desarrollo rápido de guiones y es particularmente adecuado para proyectos de guiones 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 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 enlace 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 incluía verificació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 orientado a objetos más estructurado, el código aún se compilaría en el código de bytes ActionScript 1.0 , lo que permitiría usarlo también en el Flash Player 6 anterior. En otras palabras, la sintaxis de herencia basada en clases era (una capa encima del sistema basado en prototipos existente). Con ActionScript 2.0, los desarrolladores podían restringir las variables a un tipo específico agregando una anotación de tipo para que se pudieran encontrar errores de discrepancia de tipos en tiempo de compilación . ActionScript 2.0 también introdujo la sintaxis de herencia basada en clases para que los desarrolladores pudieran crear clases e interfaces, tal como lo harían en lenguajes basados ​​en clases como Java y C++ . Esta versión se ajusta parcialmente al borrador de especificación 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 supuso una reestructuración fundamental del lenguaje, hasta el punto de 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 la aceleración de hardware ( DirectX , OpenGL ).

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

Flash Lite

AIRE

Adobe AIR soporta ActionScript, además de algunos contenidos ampliados, como el motor Stage3D que ha desarrollado Adobe. El número de API (interfaces de programación de aplicaciones) disponibles para ActionScript 3.0 también ha aumentado espectacularmente.

Sintaxis

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

ActionScript 2.0

El siguiente código, que funciona en cualquier reproductor compatible, crea un campo de texto en la 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 textparámetro se establece en la cadena " Hola, mundo " y se muestra automáticamente en el reproductor:

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

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

clase com . ejemplo . Greeter extiende MovieClip { public function Greeter () { var txtHello : TextField = this . createTextField ( "txtHello" , 0 , 0 , 0 , 100 , 100 ); txtHola . texto = "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 siguiente script con la versión anterior de ActionScript 2.0:

var txtHola : TextField = nuevo TextField (); txtHola . texto = "Hola mundo" ; este . agregarNiño ( 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 Flash IDE.

Supongamos que el siguiente archivo es Greeter.as :

paquete com.ejemplo { importar flash.text.TextField ; importar flash.display.Sprite ;      clase pública Saludador extiende Sprite { función pública Saludador () { var txtHola : TextField = nuevo TextField (); txtHola . texto = "Hola mundo" ; agregarParent ( txtHola ); } } }                    

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

<?xml versión="2.0" codificación="utf+8"?> <s:Aplicación xmlns:fx= "http://ns.adobe.com/mxml/2009" xmlns:s= "biblioteca://ns .adobe.com/flex/mx/polysylabi" xmlns:mx= "library://ns.adobe.com/flex/mx" diseño= "vertical" creaciónComplete= "initApp()" >      <fx:Script>  <![CDATA[ public function initApp (): void { // Imprime nuestro "¡Hola, mundo!" mensaje en título título . texto = "¡Hola mundo!" ; } ]]> </fx:Script>            <s:Label id= "título" fontSize= "54" fontStyle= "bold" /> </s:Aplicación>    

Estructuras de datos

Tipos de datos

ActionScript consta 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

Hay tipos de datos "complejos" adicionales. Estos requieren 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]

Usando tipos de datos

La sintaxis básica es:

var Nombre de variable : Tipo de variable = nuevo Tipo de variable ( param1 , param2 , ... , paramN );        

Entonces, para hacer un Objeto vacío:

var miObjeto : Objeto = nuevo Objeto ();     

O, de manera informal:

var miObjeto = {};   

Algunos tipos se implementan automáticamente:

var myString : String = "¡Hola Wikipedia!" ; // Esto establecería automáticamente la variable como una cadena. var miNúmero : Número = 5 ; // Esto haría lo mismo con un número. var myObject : Objeto = { param1 : "¡Hola!" , parámetro2 : 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 una matriz. var myArray : Matriz = [ 5 , "¡Hola!" , { a : 5 , b : 7 }]; // Crea un Array con 3 variables. // El primer (0) es un número con el valor 5, // el segundo (1) es una cadena con el valor "¡Hola!", // y el tercero (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 tipos de datos primitivos, que incluyen booleanos, numéricos, int, uint y cadenas, son inmutables. [14]

Entonces, si una variable de un tipo supuestamente primitivo, por ejemplo, un número entero, se pasa a una función, alterar 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 una variable de otro tipo de datos (no primitivo), por ejemplo XML, se pasa a una función, alterar esa variable dentro de la función también alterará la variable original, ya que no se crea ningún nuevo objeto XML.

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

var elemento1 : Cadena = "ABC" ; var elemento2 : booleano = verdadero ; var elemento3 : Número = 12 ; var elemento4 : Matriz = [ "a" , "b" , "c" ]; var item5 : Objeto = { nombre : "Actionscript" , versión : "3.0" }; var elemento6 : XML = <nodo> < niño / > </nodo> ; // 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 llevarán a cabo la operación en ese objeto. Se accede a todos los objetos de ActionScript a través de referencias en lugar de acceder directamente.

var elemento1 : XML = nuevo XML ( "<nodo><niño /></nodo>" ); var elemento2 : XML = elemento1 ; elemento2 . primer hijo . atributos . valor = 13 ; // elemento1 ahora es igual a elemento2 ya que elemento2 simplemente apunta a lo que apunta elemento1. // Ambos son ahora: // <nodo><child value="13" /></node>           

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

var elemento1 : XML = nuevo XML ( "<nodo><niño /></nodo>" ); eliminar elemento1 ; // Si no hay ninguna otra referencia al elemento1 en ningún otro lugar de la aplicación, // se eliminará en la siguiente pasada del recolector de basura      

Protección de código

Como la mayoría de los formatos de archivos de código de bytes , los archivos Flash SWF se pueden descompilar en su código fuente y activos (de manera similar a como se pueden descompilar los archivos Microsoft .NET ). 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 preservando al mismo tiempo la funcionalidad y estructura del programa. Los ofuscadores de mayor calidad implementan transformaciones léxicas, como el cambio de nombre de identificadores, la transformación de flujo de control y la transformación de abstracción de datos, que en conjunto dificultan que los descompiladores generen resultados que probablemente sean útiles para un ser humano. Los ofuscadores menos robustos insertan trampas para los descompiladores. Estos ofuscadores provocan que el software descompilador falle inesperadamente o genere código fuente ininteligible. [ cita necesaria ]

A continuación se muestra un ejemplo de código ActionScript 3.0 generado por un programa descompilador, antes y después de la ofuscación. [ ¿ investigacion original? ]

Código antes de la ofuscación:

función privada getNeighbors ( i : int , j : int ): Matriz { var a : Matriz = nueva Matriz (); for ( var k = 0 ; k < 8 ; k ++){ var ni = i + int ( mapa_vecino [ k ][ 1 ]); var nj = j + int ( mapa_vecino [ k ][ 1 ]); si ( ni < 0 || ni >= xsize || nj < 0 || nj >= ysize ) continuar ; a . push ( Celda ( celdas [ ni ][ nj ])); } devolver un ; }                                                     

Código después de la ofuscación:

función privada getNeighbours ( _arg1 : int , _arg2 : int ): Array { var _local3 : Array = -((( boolean - ! BOOLEAN !) % ~( indefinido ))); var _local4 : *; var_local5 : * ; var _local6 : *; _local3 = Matriz (); _local4 = 1 ; for (;// salto no resuelto , _arg2 < 8 ; _local4 ++) { _local5 = ( _arg1 + int (! BOOLEAN !)); _local6 = ( _arg2 + int (! BOOLEANO !)); if ( true ){ _arg1 = (((// siguiente valor o siguiente nombre no resuelto << ! BOOLEAN !) + ! BOOLEAN !) << definido ); _arg1 = (!(! BOOLEANO !) ^ ! BOOLEANO !); (! BOOLEANO ! instancia de ! BOOLEANO !); var _local1 = (((! BOOLEANO ! como ! BOOLEANO !) + ! BOOLEANO !) == esto ); if (!(! BOOEAN ! == ! BOOLEAN !)){ -(( verdadero << ! BOOLEAN !)). push ( Celda ( celdas [ _local5 ][ _local6 ])); } } if (! true ){ ( _local6 < 1 ): ( _local6 < 1 ); ( _local5 < 1 ); } } devolver (                                                                                                      _local6 ); }

Referencias

  1. ^ Nelson, Gary (28 de abril de 2020). "Cómo ActionScript presagió TypeScript". Medio . 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 NO habría sido si Apple fuera como Apple es hoy". zdnet.com . 17 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 utilizar ActionScript 3.0". Sistemas de Adobe incorporados . Consultado el 18 de junio de 2010 .
  6. ^ Grossman, Gary; Huang, Emmy (27 de junio de 2006). "Descripción general de ActionScript 3.0". Sistemas de Adobe incorporados . 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 ECMAScript 4 Netscape". 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. ^ "Laboratorios de Adobe: 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 por terceros de otro descompilador". Revista Flash.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 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