Comprobacion de tipos en Actionscript 3.0 con as e is
En Actionscript 3.0 disponemos de dos operadores para verificar tipos: "as" e "is". Es decir, con estos operadores podemos comprobar, por ejemplo, si un elemento del escenario es de tipo Sprite, o si una variable es de tipo Number.
Para ver como funcionan estos dos operadores voy a utilizar un escenario sobre el que tengo 3 MovieClips de la clase "Cuadrado", que extiende de MovieClip, y 3 MovieClips de la clase "Circulo", que también extiende de MovieClip.
El operador is
Permite comprobar si una variable o expresión forma parte de un tipo de datos. No solo verifica si un objeto es una instancia de la clase especificada, sino también si es una subclase de ella o implementa la misma interfaz.
Por ejemplo, si en el escenario que hemos propuesto ponemos:
1 2 3 4 5 |
for(var i:uint = 0; i < numChildren; i++){ if (getChildAt(i) is DisplayObject) { getChildAt(i).alpha = .1 } } |
Obtenemos:
Como vemos, "parpadean" círculos y cuadrados, ya que todos son instancias de clases que heredan de DisplayObject. Sin embargo, si ponemos:
1 2 3 4 5 |
for(var i:uint = 0; i < numChildren; i++){ if (getChildAt(i) is Cuadrado) { getChildAt(i).alpha = .1 } } |
vemos que solamente parpadean los cuadrados, ya que los circulos no pertenecen a la misma clase ni heredan de "Cuadrado".
El operador as
También permite comprobar si un elemento es miembro de un tipo de datos. Sin embargo, en lugar de devolver true o false, devuelve el valor de la expresión en lugar de true, y null en lugar de false. Por ejemplo:
1 2 3 |
trace(miCirculo as Circulo) //Devuelve: [object Circulo] trace(miCirculo as Sprite) //Devuelve: [object Circulo] trace(miCirculo as Cuadrado) //Devuelve: null |