Repetir mientras se cumpla
Un programa hace falta que repita cosas: bajar el stock de cada producto vendido, sumar los precios de la bandeja, mostrar el menú completo. Para eso están los bucles, que repiten un bloque de código varias veces.
El primero es while: repite mientras la condición sea verdadera.
let empanadas = 3;
while (empanadas > 0) {
console.log(`Quedan ${empanadas} empanadas`);
empanadas--;
}
El bucle imprime «Quedan 3», «Quedan 2», «Quedan 1» y termina cuando empanadas llega a 0. La pieza clave es el empanadas--: algo tiene que cambiar dentro del bucle para que la condición deje de ser verdadera. Si no cambia, el bucle nunca termina y la pestaña se cuelga.
empanadas--, la condición siempre es verdadera y el programa no sale nunca. Es el error más común con while. La consola del navegador sigue respondiendo, así que se puede cerrar la pestaña y corregir.
for: repetir una cantidad conocida
Cuando se sabe de antemano cuántas veces hay que repetir, se usa for, que junta las tres piezas en una línea: empezar, hasta cuándo y cómo avanzar.
for (let i = 1; i <= 5; i++) {
console.log(`Pedido número ${i}`);
}
Se lee así: let i = 1 arranca el contador; i <= 5 es la condición para seguir; i++ suma uno al final de cada vuelta. Imprime del 1 al 5.
| Bucle | Se usa cuando |
|---|---|
while | No se sabe cuántas vueltas: depende de una condición que cambia adentro. |
for | Se sabe la cantidad: cinco productos, diez alumnos, tres intentos. |
La variable i es solo un contador: se llama así por convención (index) y vive únicamente dentro del bucle.
Recorrer una lista
El uso más importante de los bucles es recorrer una lista de datos. En la lección 6 se ve el tema a fondo; por ahora alcanza con una lista simple y su length (la cantidad de elementos):
const menu = ["Sándwich", "Empanada", "Alfajor"];
for (let i = 0; i < menu.length; i++) {
console.log(menu[i]);
}
El contador arranca en 0 —la primera posición de una lista es la 0, no la 1— y llega hasta menu.length - 1. Así se recorre el menú entero sin escribir una línea por producto: si mañana se agrega uno, el bucle lo muestra solo.
Con un acumulador se puede, por ejemplo, sumar el total:
const precios = [350, 200, 250];
let total = 0;
for (let i = 0; i < precios.length; i++) {
total += precios[i];
}
console.log(total); // 800
Cortar y saltar
Dos instrucciones cambian el recorrido de un bucle desde adentro:
breakcorta el bucle entero y sigue con lo de abajo.continuesaltea el resto de esa vuelta y pasa a la siguiente.
for (let i = 0; i < menu.length; i++) {
if (menu[i] === "Alfajor") {
break; // no sigue mirando
}
console.log(menu[i]);
}
Con continue, en cambio, se saltea un caso y se sigue: if (precio < 0) continue; ignora los precios inválidos sin cortar el resto del recorrido. Se usan poco, pero cuando hacen falta no hay otra forma limpia de hacerlo.
Resumen
whilerepite mientras una condición sea verdadera; algo tiene que cambiar adentro.forrepite una cantidad conocida, con contador, condición y avance en una línea.- Para recorrer una lista: contador de 0 a
length - 1y acceso conlista[i]. - Un acumulador (
let total = 0+total += ...) suma dentro del bucle. breakcorta el bucle;continuesaltea una vuelta.- Si la condición nunca deja de ser verdadera, el bucle es infinito.
En la próxima lección el código se ordena en funciones: pedazos con nombre que se llaman cuando hacen falta.
Licencia. El material de esta página es elaboración propia de Prof Mauro Bobyk —a partir de las fuentes que detalla el pie del sitio— y se publica bajo una licencia Creative Commons BY-NC-SA 4.0.