Ir directamente al contenido de esta página

codexexempla.org

Ejemplos y más información sobre for

El ejemplo funcionando

Vamos a ver funcionar el ejemplo que ya hemos visto, pero con la diferencia de que no voy a emplear como medio de salida las molestas ventanas de alerta:


    var obras = new Array();
        obras[0] = "Aparato de vuelo rasante";
        obras[1] = "Compañía de sueños ilimitada";
        obras[2] = "Crash";
        obras[3] = "El día de la creación";
        obras[4] = "El mundo sumergido";
        obras[5] = "Hola América";
        obras[6] = "La exhibición de atrocidades";
        obras[7] = "La isla de cemento";
        obras[8] = "La sequía";
        obras[9] = "Milenio negro";
        obras[10] = "Mitos del futuro próximo";
        obras[11] = "Playa terminal";
        obras[12] = "Rascacielos"
        obras[13] = "Super-Cannes";
        obras[14] = "Zona de catástrofe";
        
    for(var i=0;i<=14;i++){
        document.getElementById('salida_obras').value += obras[i]+'\n';
    }
        

Probémoslo.

Al pulsar , las obras aparecerán en el área de texto de arriba.

Lo único que hace el bucle es añadir al valor de la caja de texto una línea con el valor correspondiente al índice de la matriz que en ese momento es el valor del contador, además de un salto de línea —+'\n'—. Lo que es getElementById lo veremos más adelante.

Un ejemplo con bucles anidados

Los bucles pueden anidarse. Vamos a crear ahora una matriz compleja y a mostrar sus contenidos:


    var obras_2 = new Array();
        obras_2[0] = new Array('James G. Ballard',
                               'Crash',
                               'El día de la creación',
                               'Rascacielos');
        obras_2[1] = new Array('Haruki Murakami',
                               'Al sur de la frontera, al oeste del sol',
                               'Crónica del pájaro que da cuerda al mundo',
                               'Kafka en la orilla');
        obras_2[2] = new Array('Vladimir Nabokov',
                               'Habla, memoria',
                               'La defensa',
                               'Pálido fuego');
        obras_2[3] = new Array('Chuck Palahniuk',
                               'Asfixia',
                               'Fantasmas',
                               'Monstruos invisibles');
                               
    for(var i=0;i<=3;i++){
        document.getElementById('salida_obras').value += 'Obras de '+obras_2[i][0]+':\n';
        for(var j=1;j<=3;j++){
            document.getElementById('salida_obras').value += ' - '+obras_2[i][j]+'\n';
        }
    }
        

Igual que antes, hay que pulsar .

El funcionamiento es el mismo que el del ejemplo anterior, pero ahora el bucle principal no vuelve a ejecutarse hasta que no se agota completamente la ejecución del bucle secundario.

Ahora supongamos que quiero en algún momento romper la ejecución del bucle secundario, por ejemplo para que sólo me muestre la primera novela de Nabokov, pero que presente el resto de la información como acaba de hacer.

Como vimos cuando tratamos la instrucción switch, break interrumpe la ejecución de un bloque de enunciados. podríamos entonces incluir una condición que rompa el bucle cuando queremos:


    for(var i=0;i<=3;i++){
        document.getElementById('salida_obras').value += 'Obras de '+obras_2[i][0]+':\n';
        for(var j=1;j<=3;j++){
            if((obras_2[i][0]=='Vladimir Nabokov')&&(j==2)){ break; }
            document.getElementById('salida_obras').value += ' - '+obras_2[i][j]+'\n';
        }
    }
        

Si , el resultado es el que he descrito.

Perfecto, ¿pero y si lo que deseo no es que sea sólo el bucle secundario el que se detenga, sino que lo haga también el principal? Pues para eso necesitamos poder identificar cada bucle, lo que nos lleva a…

Etiquetar bucles

Para etiquetar un bucle sólo hay que asignarle un nombre seguido de dos puntos (:) antes de for:


    etiqueta:for(contador;condición;variación_del_contador){
        …enunciados a ejecutar…
    }
        

De esta manera se lo puede identificar al emplear break:


    break etiqueta_del_bucle_a_romper;
        

Bien, pues vamos a seguir con nuestro ejemplo y vamos a detener la ejecución del bucle principal en el mismo punto que antes:


    bucle_principal:for(var i=0;i<=3;i++){
        document.getElementById('salida_obras').value += 'Obras de '+obras_2[i][0]+':\n';
        bucle_secundario:for(var j=1;j<=3;j++){
            if((obras_2[i][0]=='Vladimir Nabokov')&&(j==2)){ break bucle_principal; }
            document.getElementById('salida_obras').value += ' - '+obras_2[i][j]+'\n';
        }
    }
        

Y , terminamos con la introducción a la instrucción for.

Volver al curso

(cc) CodexExempla.org, 2007–2024 Mapa del sitio | XHTML | CSS | AA