for (inicialización; condición; incremento){ sentencia ; ... }
La sentencia for (réplica del lenguaje C) es una sentencia que implementa un bucle, es decir, que es capaz de repetir un grupo de sentencias un número determinado de veces.
Para implementar este bucle se deben especificar, entre paréntesis, tres partes diferentes, separadas por símbolos ; (punto y coma) tras la palabra reservada for. Estas tres partes son opcionales (pueden omitirse) y son
las siguientes:
- Inicialización. En esta parte se suele codificar una sentencia de asignación que fija el valor inicial de la variable que va a utilizarse como contador de iteraciones del bucle (a cada ejecución del grupo interior de sentencias se le denomina una iteración del bucle). Un ejemplo puede ser la sentencia de asignación x=0, que fijaría la variable x a cero al inicio del bucle (valor para la primera iteración).
- Condición. En esta parte se especifica una condición; justo antes de cada iteración se comprobará que sea cierta para pasar a ejecutar el grupo de sentencias. Si la condición se evalúa como falsa, se finalizará el bucle for, continuando el programa tras el END del bucle for. Un ejemplo de condición puede ser x10, que permitirá que se ejecute el grupo interior de sentencias únicamente cuando la variable x sea un número menor que 10.
- Incremento. En la última de las tres partes es donde se indica el incremento de la variable usada como contador por cada iteración del bucle; normalmente ésto se expresa también con una sentencia de asignación. Por ejemplo, la sentencia x=x+1 le sumaría 1 a la variable x tras cada iteración del bucle.
Tras la definición del bucle for con sus tres partes es donde debe aparecer el grupo de sentencias interiores al bucle que se van a repetir secuencialmente mientras se cumpla la condición de permanencia (parte segunda).
Cuando en un programa llega una sentencia for se ejecuta primero la parte de la inicialización y se comprueba la condición; si ésta es cierta se ejecutará el grupo de sentencias interiores y, después, la parte del incremento, volviéndose a comprobar la condición, etc. Si antes de cualquier iteración la condición resulta falsa, finalizará la sentencia for inmediatamente.
A continuación, se muestra un programa con un bucle for con las tres partes sugeridas en las secciones anteriores.
MAIN_PROGRAM_CDIV BEGIN_PROGRAM for ( x=0 ; x<10 ; x=x+1 ){ // Aquí vendrían las sentencias interiores. } END_PROGRAM
Este bucle se ejecutaría la primera vez con la variable x valiendo 0, la segunda valiendo 1, ..., y la última valiendo 9; tras esta iteración se ejecutaría la parte del incremento, pasando x a valer 10 y, entonces, al comprobarse la condición de permanencia en el bucle (que x sea menor que 10) y resultar ésta falsa, se daría por finalizado el bucle.
Como se ha mencionado, las tres partes en la definición del bucle son opcionales; si se omitieran las tres:
for ( ; ; ){ // ... }
Entonces, este bucle es equivalente a un bucle LOOP{ ... }.
Además en un bucle for pueden ponerse varias partes de inicialización, condición o incremento separadas por comas (,), ejecutándose todas las inicializaciones al principio, luego comprobándose todas las condiciones de permanencia (si cualquiera resulta falsa, el bucle finalizará), las sentencias interiores y, al final, tras cada iteración, todos los incrementos.
MAIN_PROGRAM_CDIV BEGIN_PROGRAM for ( x=0, y=1000 ; x<y ; x=x+2, y=y+1 ){ // Aqui vendrían las sentencias interiores. } END_PROGRAM
Una sentencia break dentro de un bucle for lo finalizará de forma inmediata, continuando el programa por la sentencia siguiente a dicho bucle.
Una sentencia continue dentro de un bucle for forzará al programa a ejecutar directamente la parte del incremento y, después, realizar la comprobación de permanencia y, si ésta es cierta, volver a ejecutar las sentencias interiores desde el principio. Si la condición resulta cierta, la sentencia continue finalizará el bucle for.
Un bucle for es, prácticamente, equivalente a un bucle while implementado de la siguiente forma:
MAIN_PROGRAM_CDIV BEGIN_PROGRAM x=0; while (x<10){ // Aqui vendrían las sentencias interiores. x=x+1; } END_PROGRAM
Con la única excepción de que una sentencia continue, dentro de este bucle while, no ejecutaría la parte del incremento, mientras que en un bucle for sí lo haría.
Si en un bucle for, tras ejecutarse la inicialización, la condición resulta falsa directamente, no se ejecutarán ninguna vez las sentencias interiores.
Las sentencias interiores a un bucle for pueden ser tantas como se quieran y de cualquier tipo incluyendo, por supuesto, nuevos bucles for.
Ver: Sintaxis