El bucle while
El bucle while repite mientras se cumpla una condición, sin saber cuántas vueltas serán. Diferencia con for, qué es do...while y cómo evitar el bucle infinito.
Definición rápida
El bucle while repite un bloque de código mientras su condición sea verdadera, sin un número de repeticiones conocido de antemano.
El bucle while repite un bloque mientras su condición sea verdadera. La diferencia con el bucle for no es de sintaxis, es de intención: for se usa cuando sabes cuántas vueltas hay que dar; while, cuando no lo sabes y dependes de que algo ocurra.
La forma básica
let saldo = 100;
let dias = 0;
while (saldo > 0) {
saldo -= 15;
dias++;
}
console.log(dias); // 7
Nadie sabe de antemano cuántas vueltas serán: dependen del saldo inicial y del gasto. Ese es el terreno de while.
La condición se comprueba antes de cada vuelta, así que si es falsa desde el principio el cuerpo no se ejecuta nunca.
Las tres piezas obligatorias
Para que un while termine hacen falta tres cosas; si falta una, tienes un bucle infinito:
- Una variable inicializada antes del bucle.
- Una condición que dependa de esa variable.
- Una modificación dentro del cuerpo que acerque la condición a ser falsa.
// bucle infinito: nada modifica saldo
let saldo = 100;
while (saldo > 0) {
console.log("gastando...");
}
En el navegador esto congela la pestaña. Costumbre útil: al escribir un while, escribe primero la línea que modifica la variable y luego el resto del cuerpo.
do...while
let respuesta;
do {
respuesta = pedirDato();
} while (respuesta === "");
Aquí el cuerpo tiene que ejecutarse al menos una vez para poder evaluar la condición. Es poco frecuente, pero cuando encaja, encaja.
Cuándo usar cada bucle
| Situación | Bucle |
|---|---|
| Recorrer una lista de principio a fin | for o for...of |
| Repetir un número fijo de veces | for |
| Repetir hasta que una condición cambie | while |
| Repetir al menos una vez y comprobar después | do...while |
Cualquier for se puede escribir como while y al contrario. Elegir el que expresa la intención es lo que hace que el código se entienda sin comentarios.
Errores típicos
- Olvidar modificar la variable de control: bucle infinito.
- Modificarla en la dirección equivocada:
while (i < 10) i--;no termina. - Comprobar con
=en lugar de===: asigna y la condición se cumple siempre.
Dónde se practica
La sintaxis es trivial; lo que se entrena es reconocer cuándo un problema es «repetir mientras…» en lugar de «repetir n veces», y garantizar que la condición termina. Eso se trabaja en el módulo 4 del curso, con ejercicios corregidos automáticamente que incluyen los casos donde el bucle no debe ejecutarse ni una vez. Ver el temario.
Preguntas frecuentes
¿Cuál es la diferencia entre while y do...while?
while comprueba la condición antes de la primera vuelta, así que puede no ejecutarse nunca. do...while ejecuta el cuerpo una vez y comprueba después, así que se ejecuta al menos una vez.
¿Cómo evito un bucle infinito?
Asegúrate de que algo dentro del cuerpo modifica la condición en cada vuelta y que ese cambio avanza hacia el final. Si la condición depende de una variable que no cambia, el bucle no termina.
¿Puedo recorrer una lista con while?
Sí, llevando el índice a mano, pero for es más adecuado: agrupa inicialización, condición y avance en una línea y así es más difícil olvidar el incremento.