Comprobacion de tipos en Actionscript 3.0 con as e is

Comprobacion de tipos en Actionscript 3.0 con as e is

Etiquetas: as 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. for(var i:uint = 0; i < numChildren; i++){
  3. 	if (getChildAt(i) is DisplayObject) {
  4. 		getChildAt(i).alpha = .1
  5. 	}
  6. }
  7.  

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. for(var i:uint = 0; i < numChildren; i++){
  3. 	if (getChildAt(i) is Cuadrado) {
  4. 		getChildAt(i).alpha = .1
  5. 	}
  6. }
  7.  

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. trace(miCirculo as Circulo) //Devuelve: [object Circulo]
  3. trace(miCirculo as Sprite) //Devuelve: [object Circulo]
  4. trace(miCirculo as Cuadrado) //Devuelve: null
  5.  
Comentarios
    • Autor
    • Iván

    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.

    • Autor
    • Pablo
    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!
    • Autor
    • Pablo
    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!
Dejar un comentario
Tu nombre (obligatorio):

E-mail (obligatorio, no se mostrará):

Web:

Comentario: