Hoy · Hoja de ruta
- 1. Aprende: Qué bucles existen y cuál corresponde a cada tipo de repetición.
- 2. Haz: Recorre una lista de productos y calcula totales y recuentos.
- 3. Comprueba: Ningún bucle se queda colgado y todos tratan bien la lista vacía.
Antes de empezar · 5 minutos, sin apuntes
- ¿Qué cosas repetirías en tu proyecto: mostrar productos, sumar precios, buscar uno?
- ¿Cuántas veces se repite cada una: un número fijo, o «hasta que…»?
- ¿Qué debería mostrar tu web si la lista está vacía?
Las tres formas, y cuándo se usa cada una
// Un número conocido de vueltas, con índice
for (let i = 0; i < 5; i++) {
console.log(`Vuelta ${i}`);
}
// Recorrer los valores de una colección: el que más usarás
for (const producto of productos) {
console.log(producto);
}
// Repetir mientras se cumpla algo, sin saber cuántas veces
let restante = 100;
while (restante > 0) {
restante -= 30;
}
| Bucle | Úsalo cuando |
|---|---|
for clásico |
Necesitas el índice, o vas de N en N |
for...of |
Solo necesitas cada valor: el caso normal |
while |
No sabes de antemano cuántas vueltas serán |
for...in |
Casi nunca: recorre claves, y trae sorpresas en arrays |
El acumulador
El patrón que más vas a repetir:
const precios = [89.9, 24.5, 199, 12.75];
let total = 0;
for (const precio of precios) {
total += precio;
}
console.log(total.toFixed(2)); // "326.15"
El recuento con condición se escribe así:
let baratos = 0;
for (const precio of precios) {
if (precio < 50) baratos++;
}
Un bucle infinito no es un error de sintaxis
El fichero está bien escrito, el navegador se queda bloqueado y no hay ningún mensaje rojo. Ocurre cuando la condición del while nunca llega a ser falsa, casi siempre porque se olvidó actualizar la variable de control.
Antes de ejecutar un while, responde a esto: ¿qué línea, dentro del bucle, acerca la condición a hacerse falsa? Si no la encuentras, todavía no ejecutes.
Salir antes: break y continue
for (const producto of productos) {
if (producto.stock === 0) continue; // salta este y sigue
if (producto.precio > 500) break; // deja de recorrer
console.log(producto.nombre);
}
Úsalos con moderación: un bucle con cuatro break repartidos es más difícil de seguir que un bucle con una condición bien escrita.
El caso vacío
const productos = [];
for (const producto of productos) {
console.log(producto); // no entra ninguna vez, y está bien
}
Un bucle sobre una lista vacía no falla: simplemente no se ejecuta. Lo que falla es el programa que da por hecho que había algo:
const media = total / productos.length; // 0 / 0 → NaN
Tarea 5 · Recorrer el catálogo
Con una lista de al menos seis precios de tu tema:
- Calcula el total y la media, tratando el caso de lista vacía.
- Cuenta cuántos elementos superan un umbral.
- Encuentra el más caro sin usar métodos de array todavía.
- Escribe un bucle que se detenga en el primero que cumpla una condición.
- Provoca un bucle infinito a propósito, obsérvalo, y explica qué faltaba.
NaN.Checkpoint · fin de la sesión 5
- Eliges el bucle adecuado y justificas por qué.
- Usas el patrón acumulador con soltura.
- Sabes qué hace que un
whiletermine. - Tu código no se rompe con una lista vacía.
Antes de cerrar · 2 minutos, sin mirar
- ¿Cuándo eliges
for...ofy cuándo unforcon índice? - ¿Qué diferencia hay entre
breakycontinue? - ¿Cuánto vale la media de una lista vacía, y qué deberías hacer?
Ver respuestas
1 · for...of cuando solo necesitas el valor; el clásico cuando necesitas la posición o un salto distinto de uno.
2 · break abandona el bucle; continue salta a la vuelta siguiente.
3 · NaN, porque divides entre cero. Hay que comprobar la longitud antes y devolver 0 o un aviso.