Sintaxis
Distinción entre mayúsculas y minúsculas:
El lenguaje ActionScript 3.0 distingue mayúsculas de minúsculas. Los identificadores que sólo se diferencien en mayúsculas o minúsculas se considerarán identificadores distintos. Por ejemplo, el código siguiente crea dos variables
distintas:
var num1:int;
var Num1:int;
Sintaxis con punto:
El operador de punto (.) permite acceder a las propiedades y los métodos de un objeto. La sintaxis con punto permite hacer referencia a una propiedad o un método de clase mediante un nombre de instancia, seguido del operador punto y el nombre de la propiedad o el método. Por ejemplo, considere la siguiente definición de clase:
class Ejemplo
{
public var Propiedad1:String;
public function Metodo1():void {}
}
La sintaxis con punto permite acceder a la propiedad Propiedad1 y al método Metodo1() utilizando el nombre de la instancia creada en el código siguiente:
var MiEjemplo:Ejemplo = new Ejemplo();
MiEjemplo.Propiedad1 = "Hola";MiEjemplo.Metodo1();
Se puede utilizar la sintaxis con punto al definir paquetes. El operador punto se utiliza para hacer referencia a paquetes anidados. Por ejemplo, la clase EventDispatcher reside en un paquete denominado events que está anidado dentro del paquete denominado flash. Se puede hacer referencia al paquete events mediante la siguiente expresión:
flash.events
También se puede hacer referencia a la clase EventDispatcher mediante esta expresión:
flash.events.EventDispatcher
Sintaxis con barras diagonales:
ActionScript 3.0 no admite la sintaxis con barras diagonales. Esta sintaxis se utilizaba en versiones anteriores de ActionScript para indicar la ruta a un clip de película o una variable.
Literales:
Un literal es un valor que aparece directamente en el código. Todos los ejemplos siguientes son literales:
17
"hello"
-3
9.4
null
undefined
true
falseLos literales también pueden agruparse para formar literales compuestos. Los literales de conjunto se escriben entre corchetes ([]) y utilizan la coma para separar los elementos de conjunto.
Un literal de conjunto puede utilizarse para inicializar un conjunto. En los siguientes ejemplos se muestran dos conjuntos que se inicializan mediante literales de conjunto. Se puede utilizar la sentencia new y pasar el literal compuesto como parámetro al constructor de la clase Array, pero también se pueden asignar valores literales directamente al crear instancias de las siguientes clases principales de ActionScript: Object, Array, String, Number, int, uint, XML, XMLList y Boolean.
// Utilice la nueva declaracion.
var miStrings:Array = new Array(["alpha", "beta", "gamma"]);
var miNums:Array = new Array([1,2,3,5,8]);
// Asignar literales directamente.
var miStrings:Array = ["alpha", "beta", "gamma"];
var miNums:Array = [1,2,3,5,8];
Los literales también se pueden utilizar para inicializar un objeto genérico. Un objeto genérico es una instancia de la clase Object. Los literales de objetos se escriben entre llaves ({}) y utilizan la coma para separar las propiedades del objeto. Cada propiedad se declara mediante el signo de dos puntos (:), que separa el nombre de la propiedad del valor de la propiedad.
Se puede crear un objeto genérico utilizando la sentencia new y pasar el literal de objeto como parámetro al constructor de la clase Object, o bien asignar el literal de objeto directamente a la instancia que se está declarando. En el siguiente ejemplo se muestran dos formas de crear un nuevo objeto genérico y se inicializa el objeto con tres propiedades (propA, propB y propC) establecidas en los valores 1, 2 y 3 respectivamente:
//Utilice la nueva declaración y añadir propiedades.
var miObject:Object = new Object();
miObject.propA = 1;
miObject.propB = 2;
miObject.propC = 3;
// Asignar literales directamente.
var miObject:Object = {propA:1, propB:2, propC:3};
Signos de punto y coma:
Se puede utilizar el signo de punto y coma (;) para finalizar una sentencia. Como alternativa, si se omite el signo de punto y coma, el compilador dará por hecho que cada línea de código representa a una sentencia independiente. Como muchos programadores están acostumbrados a utilizar el signo de punto y coma para indicar el final de una sentencia,
el código puede ser más legible si se usan siempre signos de punto y coma para finalizar las sentencias.
El uso del punto y coma para terminar una sentencia permite colocar más de una sentencia en una misma línea, pero esto hará que el código resulte más difícil de leer.
Paréntesis:
Los paréntesis (()) se pueden utilizar de tres modos diferentes en ActionScript 3.0. En primer lugar, se pueden utilizar para cambiar el orden de las operaciones de una expresión. Las operaciones agrupadas entre paréntesis siempre se ejecutan primero. Por ejemplo, se utilizan paréntesis para modificar el orden de las operaciones en el código siguiente:
trace(2 + 3 * 4); // 14
trace((2 + 3) * 4); // 20
En segundo lugar, se pueden utilizar paréntesis con el operador coma (,) para evaluar una serie de expresiones y devolver el resultado de la expresión final, como se indica en el siguiente ejemplo:
var a:int = 2;
var b:int = 3;
trace((a++, b++, a+b)); // 7
Por último, se pueden utilizar paréntesis para pasar uno o más parámetros a funciones o métodos, como se indica en el siguiente ejemplo, que pasa un valor String a la función trace():
trace("Hola"); // Hola
Comentarios:
El código de ActionScript 3.0 admite dos tipos de comentarios: comentarios de una sola línea y comentarios multilínea.
Estos mecanismos para escribir comentarios son similares a los equivalentes de C++ y Java. El compilador omitirá el texto marcado como un comentario.
Los comentarios de una sola línea empiezan por dos caracteres de barra diagonal (//) y continúan hasta el final de la línea. Por ejemplo, el código siguiente contiene un comentario de una sola línea:
var Numero:Number = 3; // Comentario de una sola linea
Los comentarios multilínea empiezan con una barra diagonal y un asterisco (/*) y terminan con un asterisco y una barra diagonal (*/).
/* Este es un comentario multilínea que puede abarcar
más de una línea de código. */
Palabras clave y palabras reservadas:
Las palabras reservadas son aquellas que no se pueden utilizar como identificadores en el código porque su uso está reservado para ActionScript. Incluyen las palabras clave léxicas, que son eliminadas del espacio de nombres del programa por el compilador. El compilador notificará un error si se utiliza una palabra clave léxica como un identificador. En la tabla siguiente se muestran las palabras clave léxicas de ActionScript 3.0.
Hay un pequeño conjunto de palabras clave, denominadas palabras clave sintácticas, que se pueden utilizar como identificadores, pero que tienen un significado especial en determinados contextos. En la tabla siguiente se muestran las palabras clave sintácticas de ActionScript 3.0.
También hay varios identificadores que a veces se llaman futuras palabras reservadas. ActionScript 3.0 no reserva estos identificadores, aunque el software que incorpore ActionScript 3.0 podrá tratar algunos de ellos como palabras clave.
Es posible que pueda utilizar un gran número de estos identificadores en su código, pero Adobe recomienda que no se utilicen ya que pueden aparecer como palabras clave en una versión posterior de dicho lenguaje.
Es posible que pueda utilizar un gran número de estos identificadores en su código, pero Adobe recomienda que no se utilicen ya que pueden aparecer como palabras clave en una versión posterior de dicho lenguaje.
Constantes:
ActionScript 3.0 admite la sentencia const, que se puede utilizar para crear constantes. Las constantes son propiedades con un valor fijo que no se puede modificar. Se puede asignar un valor a una constante una sola vez y la asignación debe realizarse cerca de la declaración de la constante. Por ejemplo, si se declara una constante como un miembro de una clase, se puede asignar un valor a esa constante únicamente como parte de la declaración o dentro del constructor de la clase.
El código siguiente declara dos constantes. Se asigna un valor a la primera constante, MINIMO, como parte de la sentencia de declaración. A la segunda constante, MAXIMO, se le asigna un valor en el constructor. Es necesario tener en cuenta que este ejemplo sólo compila en modo estándar, ya que el modo estricto sólo permite asignar un valor de constante en tiempo de inicialización.
class A
{
public const MINIMO:int = 0;
public const MAXIMO:int;
public function A()
{
MAXIMO = 10;
}
}
var a:A = new A();
trace(a.MINIMO); // 0
trace(a.MAXIMO); // 10
Se producirá un error si se intenta asignar de otra manera un valor inicial a una constante. Por ejemplo, si se intenta establecer el valor inicial de MAXIMO fuera de la clase, se producirá un error en tiempo de ejecución.
ActionScript 3.0 admite la sentencia const, que se puede utilizar para crear constantes. Las constantes son propiedades con un valor fijo que no se puede modificar. Se puede asignar un valor a una constante una sola vez y la asignación debe realizarse cerca de la declaración de la constante. Por ejemplo, si se declara una constante como un miembro de una clase, se puede asignar un valor a esa constante únicamente como parte de la declaración o dentro del constructor de la clase.
El código siguiente declara dos constantes. Se asigna un valor a la primera constante, MINIMO, como parte de la sentencia de declaración. A la segunda constante, MAXIMO, se le asigna un valor en el constructor. Es necesario tener en cuenta que este ejemplo sólo compila en modo estándar, ya que el modo estricto sólo permite asignar un valor de constante en tiempo de inicialización.
class A
{
public const MINIMO:int = 0;
public const MAXIMO:int;
public function A()
{
MAXIMO = 10;
}
}
var a:A = new A();
trace(a.MINIMO); // 0
trace(a.MAXIMO); // 10
Se producirá un error si se intenta asignar de otra manera un valor inicial a una constante. Por ejemplo, si se intenta establecer el valor inicial de MAXIMO fuera de la clase, se producirá un error en tiempo de ejecución.
class A
{
public const MINIMO:int = 0;
public const MAXIMO:int;
}
var a:A = new A();
a["MAXIMO"] = 10; // Error en tiempo de ejecución.
ActionScript 3.0 define una amplia gama de constantes para su uso. Por convención, en ActionScript las constantes se escriben en mayúsculas y las palabras que las forman se separan mediante el carácter de subrayado (_). Por ejemplo, la definición de la clase MouseEvent utiliza esta convención de nomenclatura para sus constantes, cada una de las
cuales representa un evento relacionado con una entrada del ratón:
package flash.events
{
public class MouseEvent extends Event
{
public static const CLICK:String = "click";
public static const DOUBLE_CLICK:String = "doubleClick";
public static const MOUSE_DOWN:String = "mouseDown";
public static const MOUSE_MOVE:String = "mouseMove";
...
}
}
Operadores
Los operadores son funciones especiales que se aplican a uno o más operandos y devuelven un valor. Un operando es un valor (generalmente un literal, una variable o una expresión) que se usa como entrada de un operador. Por ejemplo, en el código siguiente, los operadores de suma (+) y multiplicación (*) se usan con tres operandos literales (2, 3 y 4) para devolver un valor. A continuación, el operador de asignación (=) usa este valor para asignar el valor devuelto, 14, a la variable sumNumber.
var sumNumber:uint = 2 + 3 * 4; // uint = 14
Los operadores pueden ser unarios, binarios o ternarios. Un operador unario se aplica a un operando. Por ejemplo, el operador de incremento (++) es un operador unario porque se aplica a un solo operando. Un operador binario se aplica a dos operandos. Por ejemplo, el operador división (/) se aplica a dos operandos. Un operador ternario se aplica a tres
operandos. Por ejemplo, el operador condicional (?:) se aplica a tres operandos.
Algunos operadores están sobrecargados, lo que significa que se comportan de distinta manera en función del tipo o la cantidad de operandos que se les pase. El operador suma (+) es un ejemplo de un operador sobrecargado que se comporta de distinta manera en función del tipo de datos de los operandos. Si ambos operandos son números, el operador suma devuelve la suma de los valores. Si ambos operandos son cadenas, el operador suma devuelve la concatenación de los dos operandos. En el siguiente ejemplo de código se muestra cómo cambia el comportamiento del operador en función de los operandos:
trace(5 + 5); // 10
trace("5" + "5"); // 55
Los operadores también pueden comportarse de distintas maneras en función del número de operandos suministrados. El operador resta (-) es la vez un operador unario y un operador binario. Si se le suministra un solo operando, el operador resta devuelve como resultado la negación del operando. Si se le suministran dos operandos, el operador resta devuelve la diferencia de los operandos. En el siguiente ejemplo se muestra el operador resta usado
primero como un operador unario y después como un operador binario.
trace(-3); // -3
trace(7 - 2); // 5
var sumNumber:uint = 2 + 3 * 4; // uint = 14
Los operadores pueden ser unarios, binarios o ternarios. Un operador unario se aplica a un operando. Por ejemplo, el operador de incremento (++) es un operador unario porque se aplica a un solo operando. Un operador binario se aplica a dos operandos. Por ejemplo, el operador división (/) se aplica a dos operandos. Un operador ternario se aplica a tres
operandos. Por ejemplo, el operador condicional (?:) se aplica a tres operandos.
Algunos operadores están sobrecargados, lo que significa que se comportan de distinta manera en función del tipo o la cantidad de operandos que se les pase. El operador suma (+) es un ejemplo de un operador sobrecargado que se comporta de distinta manera en función del tipo de datos de los operandos. Si ambos operandos son números, el operador suma devuelve la suma de los valores. Si ambos operandos son cadenas, el operador suma devuelve la concatenación de los dos operandos. En el siguiente ejemplo de código se muestra cómo cambia el comportamiento del operador en función de los operandos:
trace(5 + 5); // 10
trace("5" + "5"); // 55
Los operadores también pueden comportarse de distintas maneras en función del número de operandos suministrados. El operador resta (-) es la vez un operador unario y un operador binario. Si se le suministra un solo operando, el operador resta devuelve como resultado la negación del operando. Si se le suministran dos operandos, el operador resta devuelve la diferencia de los operandos. En el siguiente ejemplo se muestra el operador resta usado
primero como un operador unario y después como un operador binario.
trace(-3); // -3
trace(7 - 2); // 5
Precedencia y asociatividad de operadores:
La precedencia y asociatividad de los operadores determina el orden en que se procesan los operadores. Aunque para aquellos usuarios familiarizados con la programación aritmética puede parecer natural que el compilador procese el operador de multiplicación (*) antes que el operador de suma (+), el compilador necesita instrucciones explícitas sobre qué operadores debe procesar primero. Dichas instrucciones se conocen colectivamente como precedencia de
operadores. ActionScript establece una precedencia de operadores predeterminada que se puede modificar utilizando el operador paréntesis (()). Por ejemplo, el código siguiente modifica la precedencia predeterminada del ejemplo anterior para forzar al compilador a procesar el operador suma antes que el operador producto:
var sumNumber:uint = (2 + 3) * 4; // uint == 20
Pueden darse situaciones en las que dos o más operadores con la misma precedencia aparezcan en la misma expresión.
En estos casos, el compilador utiliza las reglas de asociatividad para determinar qué operador se procesa primero.
Todos los operadores binarios, salvo los operadores de asignación, tienen asociatividad desde la izquierda, lo que significa que los operadores de la izquierda se procesan antes que los operadores de la derecha. Los operadores de asignación y el operador condicional (?:) tienen asociatividad desde la derecha, lo que significa que los operadores de la derecha se procesan antes que los operadores de la izquierda.
Consideremos, por ejemplo, los operadores menor que (<) y mayor que (>), que tienen la misma precedencia. Si ambos operadores se utilizan en la misma expresión, el operador de la izquierda se procesará en primer lugar porque ambos operadores tienen asociatividad desde la izquierda. Esto significa que las dos sentencias siguientes generan el mismo resultado:
trace(3 > 2 < 1); // false
trace((3 > 2) < 1); // false
El operador mayor que se procesa primero, lo que devuelve un valor true, ya que el operando 3 es mayor que el operando 2. A continuación, se pasa el valor true al operador menor que, junto con el operando 1. El código siguiente representa este estado intermedio:
trace((true) < 1);
El operador menor que convierte el valor true en el valor numérico 1 y compara dicho valor numérico con el segundo operando 1 para devolver el valor false (el valor 1 no es menor que 1).
trace(1 < 1); // false
Se puede modificar la asociatividad predeterminada desde la izquierda con el operador paréntesis. Se puede ordenar al compilador que procese primero el operador menor que escribiendo dicho operador y sus operandos entre paréntesis. En el ejemplo siguiente se utiliza el operador paréntesis para producir un resultado diferente utilizando los mismos números que en el ejemplo anterior:
trace(3 > (2 < 1)); // true
El operador menor que se procesa primero, lo que devuelve un valor false, ya que el operando 2 no es menor que el operando 1. A continuación, se pasa el valor false al operador mayor que, junto con el operando 3. El código siguiente representa este estado intermedio:
trace(3 > (false));
El operador mayor que convierte el valor false en el valor numérico 0 y compara dicho valor numérico con el otro operando 3 para devolver el valor true (el valor 3 es mayor que 0).
trace(3 > 0); // true
En la tabla siguiente se muestran los operadores de ActionScript 3.0 por orden decreciente de precedencia. Cada fila de la tabla contiene operadores de la misma precedencia. Cada fila de operadores tiene precedencia superior a la fila que aparece debajo de ella en la tabla.
El operador mayor que convierte el valor false en el valor numérico 0 y compara dicho valor numérico con el otro operando 3 para devolver el valor true (el valor 3 es mayor que 0).
trace(3 > 0); // true
En la tabla siguiente se muestran los operadores de ActionScript 3.0 por orden decreciente de precedencia. Cada fila de la tabla contiene operadores de la misma precedencia. Cada fila de operadores tiene precedencia superior a la fila que aparece debajo de ella en la tabla.
Operadores principales:
Los operadores principales incluyen los que se utilizan para crear literales Array y Object, agrupar expresiones, llamar a funciones, crear instancias de clase y acceder a propiedades.
Todos los operadores principales, indicados en la tabla siguiente, tienen la misma precedencia. Los operadores que forman parte de la especificación E4X se indican mediante la notación (E4X).
Los operadores principales incluyen los que se utilizan para crear literales Array y Object, agrupar expresiones, llamar a funciones, crear instancias de clase y acceder a propiedades.
Todos los operadores principales, indicados en la tabla siguiente, tienen la misma precedencia. Los operadores que forman parte de la especificación E4X se indican mediante la notación (E4X).
Operadores de sufijo:
Los operadores de sufijo se aplican a un operador para aumentar o reducir el valor. Aunque estos operadores son unarios, se clasifican por separado del resto de los operadores unarios debido a su mayor precedencia y a su comportamiento especial. Al utilizar un operador de sufijo como parte de una expresión mayor, el valor de la expresión se devuelve antes de que se procese el operador de sufijo. Por ejemplo, el siguiente código muestra cómo se devuelve
el valor de la expresión xNum++ antes de que se incremente el valor:
var xNum:Number = 0;
trace(xNum++); // 0
trace(xNum); // 1
Todos los operadores de sufijo, indicados en la tabla siguiente, tienen la misma precedencia:
Los operadores de sufijo se aplican a un operador para aumentar o reducir el valor. Aunque estos operadores son unarios, se clasifican por separado del resto de los operadores unarios debido a su mayor precedencia y a su comportamiento especial. Al utilizar un operador de sufijo como parte de una expresión mayor, el valor de la expresión se devuelve antes de que se procese el operador de sufijo. Por ejemplo, el siguiente código muestra cómo se devuelve
el valor de la expresión xNum++ antes de que se incremente el valor:
var xNum:Number = 0;
trace(xNum++); // 0
trace(xNum); // 1
Todos los operadores de sufijo, indicados en la tabla siguiente, tienen la misma precedencia:
Operadores unarios:
Los operadores unarios se aplican a un operando. Los operadores de incremento (++) y decremento (--) de este grupo son operadores de prefijo, lo que significa que aparecen delante del operando en una expresión. Los operadores de prefijo difieren de los correspondientes operadores de sufijo en que la operación de incremento o decremento se
realiza antes de que se devuelva el valor de la expresión global. Por ejemplo, el siguiente código muestra cómo se devuelve el valor de la expresión ++xNum después de que se incremente el valor:
var xNum:Number = 0;
trace(++xNum); // 1
trace(xNum); // 1
Todos los operadores unarios, indicados en la tabla siguiente, tienen la misma precedencia:
Los operadores unarios se aplican a un operando. Los operadores de incremento (++) y decremento (--) de este grupo son operadores de prefijo, lo que significa que aparecen delante del operando en una expresión. Los operadores de prefijo difieren de los correspondientes operadores de sufijo en que la operación de incremento o decremento se
realiza antes de que se devuelva el valor de la expresión global. Por ejemplo, el siguiente código muestra cómo se devuelve el valor de la expresión ++xNum después de que se incremente el valor:
var xNum:Number = 0;
trace(++xNum); // 1
trace(xNum); // 1
Todos los operadores unarios, indicados en la tabla siguiente, tienen la misma precedencia:
Operadores multiplicativos:
Los operadores multiplicativos toman dos operandos y realizan cálculos de multiplicación, división o módulo.
Todos los operadores multiplicativos, indicados en la tabla siguiente, tienen la misma precedencia:
Los operadores multiplicativos toman dos operandos y realizan cálculos de multiplicación, división o módulo.
Todos los operadores multiplicativos, indicados en la tabla siguiente, tienen la misma precedencia:
Operadores aditivos:
Los operadores aditivos se aplican a dos operandos y realizan cálculos de suma y resta. Todos los operadores aditivos, indicados en la tabla siguiente, tienen la misma precedencia:
Los operadores aditivos se aplican a dos operandos y realizan cálculos de suma y resta. Todos los operadores aditivos, indicados en la tabla siguiente, tienen la misma precedencia:
Operadores de desplazamiento en modo bit:
Los operadores de desplazamiento en modo bit se aplican a dos operandos y desplazan los bits del primer operando según lo especificado por el segundo operando. Todos los operadores de desplazamiento en modo de bit, indicados en la tabla siguiente, tienen la misma precedencia:
Los operadores de desplazamiento en modo bit se aplican a dos operandos y desplazan los bits del primer operando según lo especificado por el segundo operando. Todos los operadores de desplazamiento en modo de bit, indicados en la tabla siguiente, tienen la misma precedencia:
Operadores relacionales:
Los operadores relacionales se aplican a dos operandos, comparan sus valores y devuelven un valor booleano. Todos los operadores relacionales, indicados en la tabla siguiente, tienen la misma precedencia:
Los operadores relacionales se aplican a dos operandos, comparan sus valores y devuelven un valor booleano. Todos los operadores relacionales, indicados en la tabla siguiente, tienen la misma precedencia:
Operadores de igualdad:
Los operadores de igualdad se aplican a dos operandos, comparan sus valores y devuelven un valor booleano. Todos los operadores de igualdad, indicados en la tabla siguiente, tienen la misma precedencia:
Los operadores de igualdad se aplican a dos operandos, comparan sus valores y devuelven un valor booleano. Todos los operadores de igualdad, indicados en la tabla siguiente, tienen la misma precedencia:
Operadores lógicos en modo bit:
Los operadores lógicos en modo bit se aplican a dos operandos y realizan operaciones lógicas a nivel de bits. Estos operadores, que tienen una precedencia diferente, se enumeran en la tabla siguiente por orden decreciente de precedencia:
Los operadores lógicos en modo bit se aplican a dos operandos y realizan operaciones lógicas a nivel de bits. Estos operadores, que tienen una precedencia diferente, se enumeran en la tabla siguiente por orden decreciente de precedencia:
Operadores lógicos:
Los operadores lógicos se aplican a dos operandos y devuelven un resultado booleano. Estos operadores, que tienen distintas precedencias, se enumeran en la tabla siguiente por orden decreciente de precedencia:
Los operadores lógicos se aplican a dos operandos y devuelven un resultado booleano. Estos operadores, que tienen distintas precedencias, se enumeran en la tabla siguiente por orden decreciente de precedencia:
Operador condicional:
El operador condicional es un operador ternario, lo que significa que se aplica a tres operandos. El operador condicional es un método abreviado para aplicar la sentencia condicional if..else.
El operador condicional es un operador ternario, lo que significa que se aplica a tres operandos. El operador condicional es un método abreviado para aplicar la sentencia condicional if..else.
Operadores de asignación:
Los operadores de asignación se aplican a dos operandos y asignan un valor a un operando en función del valor del otro operando. Todos los operadores de asignación, indicados en la tabla siguiente, tienen la misma precedencia:
Los operadores de asignación se aplican a dos operandos y asignan un valor a un operando en función del valor del otro operando. Todos los operadores de asignación, indicados en la tabla siguiente, tienen la misma precedencia:
No hay comentarios:
Publicar un comentario