Introducción a ActionScript 3 [AS3]
Usando AS3 podemos crear distintos tipos de aplicaciones, tales como webs, juegos, aplicaciones de escritorio usando AIR, etc. Iremos conociendo este lenguaje paso a paso con la ayuda de algunos libros y digo iremos ya que no soy ningún experto en este lenguaje, apenas estoy empezando a conocerlo.
Empezaremos con lo más básico, teniendo en cuenta que una persona no tiene conocimientos de programación, si en caso algo no queda claro o falta algún tema por tocar, les agradecería me lo hagan saber para poder seguir aprendiendo juntos sin dejar cosas a medias, vacíos o conocimientos incompletos.
Así que lo primero es conocer la terminología a usar y algunos conceptos básicos:
Variable:
Una variable es un espacio de memoria de una dimensión determinada, la cual puede ser fija o dinámica, el cual sera usado para guardar valores o el resultado de cálculos realizados durante la secuencia de un programa.
Una variable tiene un tipo determinado y de acuerdo a esto podremos almacenar en una variable un número, un texto o un conjunto de valores.
Para crear una variable hay tener en cuenta algunas condiciones con el nombre que usaremos para representarla, tales como:
- El primer carácter siempre es una letra minúscula o un guión bajo.
- El nombre de la variable puede contener letras mayúsculas o minúsculas, números, y guiones bajos.
- No se pueden usar simbolos especiales como la letra "ñ", arrobas, parentesis, etc.
- La primera letra de cada palabra que forma la variable deberá ir en mayuscula, por ejemplo: valorNeto, idPersonaNatural.
El último punto es básicamente una convención tal como se manejan las variables en java, pero no es precisamente obligatorio no obtendremos un error por no hacerlo, cada uno puede manejar las variable como gusten, muchos utilizan guiones bajos para separar las palabras, en este caso siempre lo haré respetando dicha regla, las tres primeras si son obligatorias a cumplir.
Se declara una variable anteponiendo la palabra reservada "var" al nombre de la variable, por ejemplo:
var idPersonaNatural;
Comentarios:
Los comentarios se usan para explicar o describir la función de una variable o método, todo lo que este comentado no será ejecutado nunca, podemos crear comentarios de una línea usando dos barras diagonales seguidas "//" o comentar varias líneas usando los comentarios de bloque "/* */", por ejemplo:
Para comentar una línea simple sería así:
Para comentar un conjunto de líneas, usaríamos:
que dejo en el código para
hacerlo más entendible */
Sentencia:
Los comandos ActionScript son ingresados como una serie de una o más sentencias. Una sentencia puede avanzar a un frame determinado o cambiar el tamaño de un MovieClip. La mayoría de las sentencias en ActionScript terminan con un punto y coma ";".
Método y Función:
Es importante saber diferenciarlos, en esencia son lo mismo y muchas veces se los confunde, no es algo trágico pero lo ideal es saber quien es quien. Los métodos y funciones son bloques de código de ActionScript, un conjunto de líneas de código las cuales, juntas, cumplen una acción determinada que puede volver a utilizarse en cualquier parte de un archivo.
En otros lenguajes de programación se los suele diferenciar porque el método no retorna un valor y la función si, pero para nuestro caso específico, actionscript 3, los métodos son simplemente funciones ubicadas dentro de una definición de clase de ActionScript, retorne algun valor o no, reciba cero, uno o "n" parámetros, siempre que pertenezca a una clase será un método, en cambio si se usa programación estructurada, es decir todo lineal, sin clases, pues ahí se tratará de una función.
Las condiciones que se describieron para la creación de una variable aplican también para los nombres de las funciones que necesitemos crear. Los métodos para diferenciarlos de las variables se reprentan con dos paréntesis al final del nombre, por ejemplo: calcularEdad(), obtenerPersonaPorId().
Se declara una función anteponiendo la palabra reservada "function" al nombre de la función y todo el contenido de la función irá entre llaves, por ejemplo:
{
// alguna accion deseada
trace("Hello World!");
}
El ejemplo anterior es una función tal como se mencionó, ahora transformaremos esta función en un método, colocando dicha función dentro de una clase, quedaría así:
{
public class HelloWorld
{
public function HelloWorld()
{
// alguna accion deseada
trace("Hello World!");
}
}
}
De momento no hay que preocuparse mucho por el segundo código ya que esto es sólo para mostrar las diferencias, lo que es una clase y como trabajar con ella se detallará más adelante, y es escencial aprender a trabajar con clases ya que ActionScript 3 es un lenguaje orientado a objetos y que ha sido creado para trabajar con clases.
Si vemos la documentación de Adobe Flash, el comando "trace" se usa para mostrar algun texto o registrar los valores que obtenemos de los cálculos que realizamos mientras depuramos, estos se mostrarán en la consola de salida que se encuentra en la parte inferior del IDE Flash [Output], podemos ver que a este método le estamos enviando el texto "Hola mundo", esto es un parámetro que le enviamos para que el comando funcione correctamente, este caso mostrará el mensaje enviado en la consola de salida.
Clase:
Las clases son declaraciones de objetos, es una representación de una cosa del mundo real.
Una clase tiene métodos y atributos, los métodos son las acciones que puede realizar y los atributos son las características propias de determinada clase. Por ejemplo: Tomando como base un carro tendriamos lo siguiente:
- Objeto: Carro.
- Atributos: color, tamaño, marca, cantidad de puertas, altura, peso.
- Métodos: avanzar, retroceder, acelerar, desacelerar, frenar.
En el ejemplo anterior a nuestra clase "Carro" le podemos cambiar el valor de los atributos, podemos cambiar el color a rojo o negro, y si se hace el llamado a uno de sus métodos como avanzar() nuestro "Carro" realizará la acción programada dentro de ese método. Para crear una nueva clase se usa la palabra reservada class, tal como se muestra a continuación:
{
}
Lo anterior vendría a ser una clase personalizada, creada por nosotros mismos y de acuerdo a nuestras necesidades, pero existen algunas otras clases que son llamadas clases nativas, estas clases son las más usadas y vienen "incorpordas" es decir no necesitan ser creadas, son usadas para manipular tipos básicos de información como podrían ser texto o números. Pueden apostar que usarán siempre al menos una o dos de estas clases nativas en cada programa que escriban, es recomendable que las conozcan y se familiaricen con ellas ya que serán usadas más adelante con mucha frecuencia. El siguiente listado muestra algunas de las clases nativas más usadas en ActionScript 3:
- String: Se usa para representar data textual. [Por ejemplo: una cadena de caracteres].
- Boolean: Se usa para representar estados lógicos verdadero y falso.
- Number: Se usa para representar números de punto flotante. [Por ejemplo: 3.14159, 19.1].
- int: Se usa para representar números enteros. [Por ejemplo: -42, 69].
- uint: Se usa para representar números enteros positivos.
- Array: Se usa para representar una lista ordenada.
- Error: Se usa para representar un error del programa, [Por ejemplo: cuando se presenta un error en el código].
- Date: Se usa para representar un punto específico en el tiempo.
- Math: Esta clase contiene los valores y operaciones matemáticas comunes.
- Function: Se usa para representar un conjunto reutilizable de instrucciones que pueden ser ejecutadas o llamadas en cualquier momento.
Las clases tienen un método que recibe un nombre especial: Constructor. El constructor de una clase es el método que creamos en la clase HelloWorld, este método es el único que empieza con letra mayúscula, ya que recibirá exactamente el mismo nombre que el de la clase que lo contiene y es el primero en ejecutarse, el constructor se ejecuta en el mismo instante en que se crea una nueva instancia de dicha clase.
Los demás métodos de la clase que creemos deberán indicar además si retorna algún valor o no, un método que no retorna valor va acompañado de la palabra reservada void, que significa vacío, crearemos algunos métodos para la clase Carro, tal como se muestra en el siguiente código:
{
trace("El carro esta avanzando.");
}
En caso el método retorne algún valor, en lugar de la palabra void, se deberá indicar que tipo de dato es el que retornará, y el método deberá terminar con un "return valor" y dicho valor deberá ser del tipo indicado anteriormente, por ejemplo el siguiente código siguiente retorna la velocidad actual del auto, un número entero:
Además estos últimos métodos también pueden recibir parámetros para realizar ciertos cálculos, esto es algo muy común en la programación orientada a objetos, por ejemplo para realizar una suma necesitamos enviar los números que serán sumados a un método que se encargará de retornar el resultado:
Objeto:
Un objeto es una instancia de una clase que se define como la unidad que en tiempo de ejecución realiza las tareas de un programa.
Cuando se habla dentro de un ámbito de programación orientada a objetos [POO], un objeto es el resultado de la instanciación de una clase, en la clase encontraremos la definición de una funcionalidad la cual se podrá usar a través de un objeto, para el caso del ejemplo anterior si necesitamos representar un carro y hacer uso de su método avanzar(), primero necesitaremos crear un objeto de tipo Carro y usar dicho objeto para invocar al método.
Para crear un nuevo objeto, es decir instanciarlo, se usa la palabra reservada new, tal como se muestra en el siguiente ejemplo:
En el ejemplo anterior, se está creando una variable "var", cuyo nombre es "miAuto", esta variable es una instancia del tipo Carro, es decir es un objeto del tipo Carro, eso se indica haciendo uso de ":Carro" después del nombre de la variable y el "new Carro()" es lo que hace es crear la instancia y la deposita en la variable donde realizamos la igualdad, en este caso "miAuto". Y será miAuto el objeto que usaremos más adelante para ejecutar los métodos definidos en la clase Carro, esto se haría de la siguiente forma:
Paquete:
Como su nombre lo indica, un paque es un contenedor conceptual de un grupo de clases, esto lo veremos más adelante.
Cada paquete delimita una región física independiente de un programa y le da un nombre a dicha región, denominada nombre de paquete. Por convención los paquetes normalmente empiezan con una letra en minúscula mientras las clases lo hacen en mayúscula, esto ayuda a distinguir entre nombres de clases y paquetes.
Cuando el código fuente de una clase se encuentra dentro de un paquete, la clase automáticamente adopta el nombre del paquete como parte de su nombre. Por ejemplo: una clase llamada Carro que se encuentra en un paquete llamado vehiculos, será reconocida como vehiculos.Carro. Note que el nombre del paquete va al inicio y se encuentra separado del nombre de la clase usando el carácter punto ".".
El nombre del paquete ayuda a distinguir a vehiculos.Carro de alguna otra clase llamada Carro que podría existir en otra ubicación, de esta forma separando en paquetes el código podrán evitar conflictos entre los nombres de las clases personalizadas que vayan creando durante el desarrollo del proyecto.
Para crear un nuevo paquete se usa la palabra reservada package, tal como se muestra a continuación:
{
// El código fuente de la clase va aquí
}
Por convención el nombre de un paquete esta definido por los siguientes elementos:
- El dominio invertido de la organización que crea el programa.
- A continuación un punto ".".
- Seguido del proposito general del contenido del paquete.
Por ejemplo, un paquete que contendrá clases genéricas, básicamente utilidades, se llamaría com.shadowjah.utils, y se crearía el paquete de la siguiente forma:
{
}
Y dentro de este paquete colocaríamos el código de nuestra clase.
Imports:
Siempre que se necesite usar una clase que no sea nativa, o no se encuentre en el mismo paquete que la clase donde se esta programando, deberá importar dicha clase, ya que como se mencionó podría darse el caso [poco recomendable] de tener dos clases con el mismo nombre en distintos paquetes, entonces el interprete no tendría como saber a cual de ellos estamos haciendo referencia.
Para importar la clase Libreria que se encuentra en el paquete utils, desde la clase Carro, se debe escribir la siguiente línea antes de la declaración de la clase y después de la del paquete:
Quedando de esta forma:
{
import com.shadowjah.utils.Libreria;
public class Carro
{
// Código de la clase Carro
}
}
Recién luego de realizar el import se podrá crear una instancia y usar la clase Libreria, también en caso sea necesario se podría importar todas las clases de un paquete haciendo uso del caracter "*", de la siguiente forma:
Es una forma válida, pero poco recomendable, lo ideal es siempre solo importar las clases que se van a usar durante la programación de la clase.
Interprete:
El interprete de ActionScript es una porción del Flash Player que examina tu código e intenta entender y ejecutarlo. Siguiendo estrictamente las reglas de sintaxis de ActionScript aseguraremos que el interprete pueda facilmente entender nuestro código. Si el interprete encuentra un error simplemente rechazará la ejecución del código y generará un mensaje de error.

