Documentación de Flash CS3 |
|||
| Programación con ActionScript 3.0 > El lenguaje ActionScript y su sintaxis > Bucles | |||
Las sentencias de bucle permiten ejecutar un bloque específico de código repetidamente utilizando una serie de valores o variables. Adobe recomienda escribir siempre el bloque de código entre llaves ({}). Aunque se pueden omitir las llaves si el bloque de código contiene una sola sentencia, esta práctica no se recomienda por la misma razón por la que no se recomienda para los condicionales: aumenta la probabilidad de que las sentencias añadidas más adelante se excluyan accidentalmente del bloque de código. Si posteriormente se añade una sentencia que se desea incluir en el bloque de código, pero no se añaden las llaves necesarias, la sentencia no se ejecutará como parte del bucle.
El bucle for permite repetir una variable para un rango de valores específico. Una sentencia for requiere tres expresiones: una variable que se establece con un valor inicial, una sentencia condicional que determina cuándo termina la reproducción en bucle y una expresión que cambia el valor de la variable con cada bucle. Por ejemplo, el siguiente código realiza cinco bucles. El valor de la variable i comienza en 0 y termina en 4, mientras que la salida son los números 0 a 4, cada uno de ellos en su propia línea.
var i:int;
for (i = 0; i < 5; i++)
{
trace(i);
}
El bucle for..in recorre las propiedades de un objeto o los elementos de una matriz. Por ejemplo, se puede utilizar un bucle for...in para repetir las propiedades de un objeto genérico (las propiedades de un objeto no se guardan en ningún orden concreto, por lo que pueden aparecer en un orden aparentemente impredecible):
var myObj:Object = {x:20, y:30};
for (var i:String in myObj)
{
trace(i + ": " + myObj[i]);
}
// salida:
// x: 20
// y: 30
También se pueden recorrer los elementos de una matriz:
var myArray:Array = ["one", "two", "three"];
for (var i:String in myArray)
{
trace(myArray[i]);
}
// salida:
// one
// two
// three
Lo que no se puede hacer es repetir las propiedades de un objeto si se trata de una instancia de una clase definida por el usuario, a no ser que la clase sea una clase dinámica. Incluso con instancias de clases dinámicas, sólo se pueden repetir las propiedades que se añadan dinámicamente.
El bucle for each..in recorre los elementos de una colección, que puede estar formada por las etiquetas de un objeto XML o XMLList, los valores de las propiedades de un objeto o los elementos de una matriz. Por ejemplo, como se indica en el siguiente fragmento, se puede utilizar un bucle for each..in para recorrer las propiedades de un objeto genérico, pero a diferencia del bucle for..in, la variable de iteración de un bucle for each..in contiene el valor de la propiedad en lugar del nombre de la propiedad:
var myObj:Object = {x:20, y:30};
for each (var num in myObj)
{
trace(num);
}
// salida:
// 20
// 30
Se puede recorrer un objeto XML o XMLList, como se indica en el siguiente ejemplo:
var myXML:XML = <users>
<fname>Jane</fname>
<fname>Susan</fname>
<fname>John</fname>
</users>;
for each (var item in myXML.fname)
{
trace(item);
}
/* salida
Jane
Susan
John
*/
También se pueden recorrer los elementos de una matriz, como se indica en este ejemplo:
var myArray:Array = ["one", "two", "three"];
for each (var item in myArray)
{
trace(item);
}
// salida:
// one
// two
// three
No se pueden recorrer las propiedades de un objeto si el objeto es una instancia de una clase cerrada. Tampoco se pueden recorrer las propiedades fijas (propiedades definidas como parte de una definición de clase), ni siquiera para las instancias de clases dinámicas.
El bucle while es como una sentencia if que se repite con tal de que la condición sea true. Por ejemplo, el código siguiente produce el mismo resultado que el ejemplo del bucle for:
var i:int = 0;
while (i < 5)
{
trace(i);
i++;
}
Una desventaja que presenta el uso de los bucles while frente a los bucles for es que es más probable escribir un bucle infinito con bucles while. El código de ejemplo de bucle for no se compila si se omite la expresión que aumenta la variable de contador, mientras que el ejemplo de bucle while sí se compila si se omite dicho paso. Sin la expresión que incrementa i, el bucle se convierte en un bucle infinito.
El bucle do..while es un bucle while que garantiza que el bloque de código se ejecuta al menos una vez, ya que la condición se comprueba después de que se ejecute el bloque de código. En el siguiente código se muestra un ejemplo sencillo de bucle do..while que genera un resultado aunque la condición no se cumpla:
var i:int = 5;
do
{
trace(i);
i++;
} while (i < 5);
// salida: 5
Flash CS3
Enviarme un mensaje de correo electrónico cuando se añadan comentarios a esta página | Informe de comentarios
Página actual: http://livedocs.adobe.com/flash/9.0_es/main/00000052.html