17 Octubre 2009
Un bucle es una iteración, una repetición. En php, como en cualquier lenguaje de programación, hay instrucciones, código, que ha de repeterise varias veces y esto se hace mediante el uso de bucles.
Nosotros veremos el bucle while (o do while) y más adelante, el bucle for.
El bucle while hace mientras se cumple tal condición, ejecuto estas instrucciones, cuando termina el código del bucle, vuelvo a evaluar la condición, si es cierta, repito el bucle, en caso contrario, continuo con el programa principal, fuera del bucle.
mientras(condición){
instrucción 1;
instrucción 2;
instrucción 3;
}
instrucción 4;
Mientras la condición sea cierta, ejecutará las instrucciones uno, dos y tres una y otra vez. Si la condición pasa a ser falsa, ejecutará la instrucción cuatro.
Veamos un ejemplo
Este programa mostraría por pantalla el mensaje:
Estoy dentro del bucle. B es igual a 1
Estoy dentro del bucle. B es igual a 3
Estoy dentro del bucle. B es igual a 6
Estoy dentro del bucle. B es igual a 10
Estoy fuera del bucle. B es igual a 10
Si hacemos una traza del programa, podremos ver que ha hecho el bucle. Una traza de programa es muy útil para ver por qué un bucle no muestra los resultados esperados. Su función es analizar, en cada ciclo del bucle, el valor de todas las variables.
En este caso, la traza sería
| A | B |
| 0 | 0 |
| 1 | 1 |
| 2 | 3 |
| 3 | 6 |
| 4 | 10 |
En este caso, las dos variables valen cero. En la primera iteración, $a aumenta de valor en 1, es decir, $a = $a + 1 (abreviado $a++). Luego, $b es igual a $b + $a, es decir, es igual al valor anterior de $b más el valor actual de $a. Creo que aún no lo había dicho, pero en programación, se hacen las operaciones que hay a la derecha del igual, y se almacena el resultado en la variable que hay a la izquierda del igual.
Cuando llegamos al final de la primera iteración, vuelve a comprobar si $b es menor que 10. Como es cierto, repite los pasos anteriores. $a valía 1, ahora pasa a valer 2. $b valía uno, ahora pasa a valer 1 + 2 = 3. Llega al final del bucle y vuelve a evaluar. Como 3 es menor que 10, repite las operacioes. $a ahora vale 3. $b valía 3, ahora valdrá 3 + 3 = 6. Como es menor que 10, repetimos. $a ahora vale 4. $b valía 6, así que ahora serán 6 + 4 = 10. Como diez no es menor que 10 (evidentemente), se evalua como falso, por tanto, pasa a ejecutar la instrucción que hay fuera del bucle.
La diferencia entre el while y el do while es que en el primer caso, se evalua la condición y, de ser cierta, ejecuta el código del bucle. Si la primera vez que se evalua la condición, esta es falsa, el códig del bucle nunca se ejecutará. Con do while, primero se ejecuta el código del bucle y luego, al final, se evalua la condición para ver si hay que repetirlo. De esta forma, el código siempre se habrá ejecutado, al menos, una vez.
La estructura es muy similar a la del while:
do{
codigo del bucle
}while(condición);
Al final, con los dos puedes obtener los mismos resultados, y la gente tiende a acostumbrarse a uno de los dos y usar siempre ese. Yo soy más de usar while, sin el do.