Actionscript3.0, Flash

marzo 2009

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:

Obtenemos:

Como vemos, "parpadean" círculos y cuadrados, ya que todos son instancias de clases que heredan de DisplayObject. Sin embargo, si ponemos:

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:

Iván says:

Que curioso Dani, estaba convencido que «as» era para castear un objeto a otro tipo de datos, por ejemplo:

miClip as Circulo;

era lo mismo que:

Circulo(miClip);

Pero por lo que veo sólo evalua si es del tipo indicado.

Pablo says:

Esta muy bueno esto no lo sabía, excelente!
pregunta existe algo semejante para comprobar si un objeto esta «addChild» en el escenario y poder removerlo??? pq me pasa a veces q necesito saber eso y puse por ej. if(mc) removeChild(mc) y no solo no lo verifica sino q si no está en el escenario me da error, esto lo solucioné usando el metodo visible pero no es muy prolijo me parece…

Gracias! y saludos!

Pablo says:

Esta muy bueno esto no lo sabía, excelente!
pregunta existe algo semejante para comprobar si un objeto esta «addChild» en el escenario y poder removerlo??? pq me pasa a veces q necesito saber eso y puse por ej. if(mc) removeChild(mc) y no solo no lo verifica sino q si no está en el escenario me da error, esto lo solucioné usando el metodo visible pero no es muy prolijo me parece…

Gracias! y saludos!