El bucle while
El bucle while permite repetir un bloque de código mientras se cumpla una condición.
A diferencia del bucle for, no necesitamos saber de antemano cuántas veces se repetirá el código. El bucle continuará ejecutándose hasta que la condición deje de ser verdadera.
Por este motivo, while es especialmente útil cuando el número de repeticiones depende de algo que ocurre durante la ejecución del programa.
Explicación
Imagina que estás llenando una botella con agua.
No sabes exactamente cuántos segundos tardará en llenarse.
Lo único que sabes es que debes seguir echando agua mientras la botella no esté llena.
En cuanto la botella se llena, dejas de hacerlo.
El bucle while funciona exactamente igual.
En lugar de indicar un número fijo de repeticiones como hacíamos con el for, le damos una condición.
Mientras esa condición sea verdadera, el código seguirá ejecutándose.
Cuando la condición deje de cumplirse, el bucle terminará automáticamente.
Esta es la principal diferencia respecto al bucle for.
- Con
for, normalmente conocemos el número de repeticiones. - Con
while, solo conocemos la condición que debe cumplirse para seguir repitiendo.
Sintaxis
La sintaxis del bucle while es muy sencilla, de hecho se puede observar que es muy similar a la del if, ya que ambas trabajan sobre una condición.
while (condición) {
// Código que se repetirá
}
Primero se comprueba la condición.
-
Si es verdadera, se ejecuta el bloque de código.
-
Cuando termina el bloque, la condición vuelve a comprobarse.
Este proceso se repite una y otra vez hasta que la condición sea falsa.
¿Cómo funciona paso a paso?
Observa el siguiente ejemplo.
let numero = 1;
while (numero <= 3) {
console.log(numero);
numero++;
}
Veamos qué ocurre.
Valor de numero | ¿Se cumple numero <= 3? | Se ejecuta |
|---|---|---|
| 1 | Sí | Se muestra 1 y se incrementa el numero |
| 2 | Sí | Se muestra 2 y se incrementa el numero |
| 3 | Sí | Se muestra 3 y se incrementa el numero |
| 4 | No | El bucle termina |
Salida:
1
2
3
Es importante observar que la variable cambia dentro del bucle.
Si nunca cambiara, la condición seguiría siendo verdadera para siempre. Por eso será muy importante que dentro del bucle while siempre haya un cambio respecto a la variable de la condición, es esta caso el cabio es numero++.
La variable de control
En la mayoría de los bucles while existe una variable cuyo valor cambia en cada repetición.
A esta variable se le suele llamar variable de control.
let contador = 1;
while (contador <= 5) {
console.log(contador);
contador++;
}
En este ejemplo, contador controla cuándo debe finalizar el bucle.
Ejemplos
Ejemplo 1. Contar del 1 al 5
let numero = 1;
while (numero <= 5) {
console.log(numero);
numero++;
}
Salida:
1
2
3
4
5
Ejemplo 2. Cuenta atrás
let numero = 5;
while (numero >= 1) {
console.log(numero);
numero--;
}
Salida:
5
4
3
2
1
En este caso disminuimos el valor de la variable en cada repetición.
Ejemplo 3. Ahorrar dinero
Una persona guarda 20 € cada semana hasta reunir al menos 100 €.
let ahorro = 0;
while (ahorro < 100) {
ahorro += 20; // en este caso la variable ahorro aumenta en 20€ cada "semana"
console.log(`Ahorro actual: ${ahorro} €`);
}
Salida:
Ahorro actual: 20 €
Ahorro actual: 40 €
Ahorro actual: 60 €
Ahorro actual: 80 €
Ahorro actual: 100 €
No sabemos cuántas repeticiones habrá con solo mirar el bucle, pero sí sabemos cuándo terminará.
Ejemplo 4. Vaciar una batería
Con una batería inicial de 100, reduce la batería 25 unidades cada vez hasta que llegue a 0.
let bateria = 100;
while (bateria > 0) {
console.log(`Batería: ${bateria}%`);
bateria -= 25;
}
Salida:
Batería: 100%
Batería: 75%
Batería: 50%
Batería: 25%
El bucle termina cuando la batería deja de ser mayor que cero.
Errores frecuentes
Olvidar modificar la variable de control
let numero = 1;
while (numero <= 5) {
console.log(numero);
}
Este bucle nunca termina porque numero siempre vale 1.
Debemos actualizar la variable.
numero++;
Utilizar una condición incorrecta
let numero = 10;
while (numero < 5) {
console.log(numero);
}
Como la condición es falsa desde el principio, el bucle no se ejecutará ninguna vez.
Modificar la variable equivocada
let numero = 1;
let otro = 0;
while (numero <= 5) {
otro++;
}
La condición depende de numero, pero quien cambia es otro.
Como numero nunca cambia, el bucle será infinito.
Buenas prácticas
- Utiliza
whilecuando no conozcas el número exacto de repeticiones. - Comprueba que la condición pueda llegar a ser falsa.
- Modifica la variable de control dentro del bucle.
- Mantén la condición sencilla y fácil de entender.
Resumen
El bucle while repite un bloque de código mientras una condición sea verdadera.
Es especialmente útil cuando no conocemos de antemano cuántas veces se repetirá el proceso.
Para evitar bucles infinitos es fundamental actualizar correctamente la variable de control y asegurarse de que la condición llegará a ser falsa en algún momento.
Ejemplos resueltos
Ejercicio resuelto 1 - Llenar un depósito
Enunciado
Un depósito contiene 0 litros de agua.
Cada minuto entran 15 litros.
Crea un programa que muestre la cantidad de agua hasta alcanzar o superar los 90 litros.
Análisis
No nos interesa repetir un número fijo de veces.
Lo importante es seguir llenando el depósito mientras todavía no haya alcanzado los 90 litros.
Solución
let litros = 0;
while (litros < 90) {
litros += 15;
console.log(`${litros} litros`);
}
Explicación
La variable litros comienza en cero.
En cada repetición añadimos 15 litros.
Cuando el depósito alcanza los 90 litros, la condición deja de cumplirse y el bucle termina.
Ejercicio resuelto 3 - Ahorrar para un viaje
Enunciado
Una persona ahorra 35 € cada semana.
Quiere reunir al menos 500 € para un viaje.
Calcula cuánto dinero tendrá al finalizar.
Análisis
No necesitamos saber cuántas semanas serán necesarias.
Solo debemos seguir ahorrando mientras no haya alcanzado el objetivo.
Solución
let ahorro = 0;
while (ahorro < 500) {
ahorro += 35;
}
console.log(`Ahorro final: ${ahorro} €`);
Explicación
El programa continúa sumando dinero hasta alcanzar o superar los 500 €.
La condición controla automáticamente cuándo debe finalizar el bucle.
El bucle do...while
El bucle do...while permite repetir un bloque de código mientras se cumpla una condición, pero tiene una característica importante: el código se ejecuta al menos una vez.
A diferencia de while, primero se ejecuta el bloque de código y después se comprueba la condición.
Ejemplo do...while
Imagina que estás intentando introducir una contraseña.
Primero tienes que introducir una contraseña al menos una vez. Después, si es incorrecta, puedes volver a intentarlo.
El funcionamiento sería:
- Introducir la contraseña.
- Comprobar si es correcta.
- Si no es correcta, volver a intentarlo.
- Repetir hasta introducir la contraseña correcta.
Esto es precisamente lo que permite hacer do...while.
La principal diferencia respecto a while es el momento en el que se comprueba la condición:
- Con
while, primero se comprueba la condición y después se ejecuta el código. - Con
do...while, primero se ejecuta el código y después se comprueba la condición.
Por tanto, un do...while siempre ejecutará su bloque al menos una vez, incluso aunque la condición sea falsa desde el principio.
Sintaxis
La sintaxis es la siguiente:
do {
// Código que se repetirá
} while (condición);
Primero se ejecuta el bloque que está dentro de do.
Después se comprueba la condición:
- Si es verdadera, el bloque vuelve a ejecutarse.
- Si es falsa, el bucle termina.
Observa que hay un ; después de la condición del while.
¿Cómo funciona paso a paso?
Observa el siguiente ejemplo:
let numero = 1;
do {
console.log(numero);
numero++;
} while (numero <= 3);
El funcionamiento sería:
Valor de numero | Se ejecuta el código | ¿Se cumple numero <= 3? |
|---|---|---|
| 1 | Se muestra 1 y aumenta a 2 | Sí |
| 2 | Se muestra 2 y aumenta a 3 | Sí |
| 3 | Se muestra 3 y aumenta a 4 | Sí |
| 4 | No se ejecuta | No |
Salida:
1
2
3
La diferencia importante es que el código se ejecuta antes de comprobar la condición.
Por ejemplo:
let numero = 10;
do {
console.log(numero);
} while (numero < 5);
Aunque numero < 5 es falso desde el principio, se mostrará:
10
Después se comprueba la condición, se obtiene false y el bucle termina. Pero almenos se habrá mostrado una vez.
Diferencia entre while y do...while
Los dos bucles sirven para repetir código mientras se cumpla una condición, pero funcionan de forma diferente.
Con while:
let numero = 10;
while (numero < 5) {
console.log(numero);
}
No se muestra nada porque la condición es falsa antes de entrar al bucle.
Con do...while:
let numero = 10;
do {
console.log(numero);
} while (numero < 5);
Se muestra:
10
Por tanto:
whilepuede ejecutarse 0 o más veces.do...whilese ejecuta 1 o más veces.
Esta diferencia es especialmente importante cuando necesitamos que una determinada acción ocurra al menos una vez.
Ejemplo. Pedir una contraseña
Imaginemos que queremos pedir una contraseña hasta que el usuario introduzca la correcta.
let contraseña;
do {
contraseña = "1234"; // Simulamos la entrada del usuario
} while (contraseña !== "1234");
console.log("Contraseña correcta");
Primero se pide la contraseña y después se comprueba si es correcta.
Si no lo fuera, el código volvería a ejecutarse.
¿Cuándo utilizar do...while?
do...while es especialmente útil cuando necesitamos ejecutar una acción al menos una vez y después queremos decidir si debe repetirse.
Algunos ejemplos pueden ser:
- Mostrar un menú y volver a mostrarlo hasta que el usuario elija salir.
- Pedir un dato al usuario hasta que sea válido.
- Realizar un intento y repetirlo si no se consigue el resultado esperado.
- Solicitar una contraseña hasta que sea correcta.