Lección 22: Bucles (for, while, do-while)
🧠 Concepto
Section titled “🧠 Concepto”Los bucles (loops) permiten ejecutar un bloque de código repetidamente mientras se cumpla una condición. Son fundamentales para trabajar con colecciones de datos y procesos repetitivos.
for clásico
Section titled “for clásico”El bucle for tiene tres partes: inicialización, condición e incremento.
for (inicialización; condición; incremento) { // código que se repite}for (let i = 0; i < 5; i++) { console.log('Iteración:', i);}// 0, 1, 2, 3, 4Partes del for:
let i = 0;— inicialización (se ejecuta una vez al inicio)i < 5;— condición (se evalúa antes de cada iteración)i++— incremento (se ejecuta al final de cada iteración)
for con arrays
Section titled “for con arrays”let frutas = ['manzana', 'pera', 'uva', 'naranja'];
for (let i = 0; i < frutas.length; i++) { console.log(`${i}: ${frutas[i]}`);}while ejecuta el bloque mientras la condición sea true. Se usa cuando no sabes cuántas iteraciones se necesitan.
let contador = 0;while (contador < 5) { console.log('Contador:', contador); contador++;}Ejemplo práctico: Leer datos hasta que el usuario ingrese “salir”.
let entrada = '';let intentos = 0;while (entrada !== 'salir' && intentos < 3) { entrada = prompt('Escribe "salir" para terminar:'); // simulado intentos++;}do-while
Section titled “do-while”Similar a while, pero ejecuta el bloque al menos una vez antes de evaluar la condición.
let numero;do { numero = Math.floor(Math.random() * 10); console.log('Generado:', numero);} while (numero !== 7);// Se ejecuta al menos una vez, incluso si el primer número es 7Bucles anidados
Section titled “Bucles anidados”Un bucle dentro de otro. Útil para tablas, matrices, etc.
for (let fila = 0; fila < 3; fila++) { let linea = ''; for (let col = 0; col < 3; col++) { linea += `[${fila},${col}] `; } console.log(linea);}// [0,0] [0,1] [0,2]// [1,0] [1,1] [1,2]// [2,0] [2,1] [2,2]💻 Ejemplo
Section titled “💻 Ejemplo”// Sumar números del 1 al 100 con forlet suma = 0;for (let i = 1; i <= 100; i++) { suma += i;}console.log('Suma 1-100:', suma); // 5050
// Tabla de multiplicar con for anidadoconsole.log('=== Tabla de multiplicar ===');for (let i = 1; i <= 5; i++) { let fila = ''; for (let j = 1; j <= 5; j++) { fila += `${i * j}\t`; } console.log(fila);}
// while: encontrar el primer número divisible entre 7 y 5let n = 1;while (!(n % 7 === 0 && n % 5 === 0)) { n++;}console.log('Primer número divisible entre 5 y 7:', n); // 35
// do-while: menú simple (simulado)let opcion;do { console.log('1. Ver saldo'); console.log('2. Retirar'); console.log('3. Salir'); opcion = 3; // simulación} while (opcion !== 3);console.log('¡Hasta luego!');📝 Ejercicio
Section titled “📝 Ejercicio”- Crea un archivo
bucles.js. - Usa un
forpara imprimir los números pares del 2 al 20. - Usa un
whilepara contar del 10 al 1 (cuenta regresiva). - Usa un
do-whilepara generar números aleatorios entre 1 y 6 (dado) hasta que salga un 6. - Crea una tabla de multiplicar del 7 con un
for.
// Pares del 2 al 20console.log('Números pares:');for (let i = 2; i <= 20; i += 2) { console.log(i);}
// Cuenta regresivaconsole.log('Cuenta regresiva:');let contador = 10;while (contador >= 1) { console.log(contador); contador--;}
// Dado hasta sacar 6console.log('Lanzando dado:');let dado;do { dado = Math.floor(Math.random() * 6) + 1; console.log('🎲', dado);} while (dado !== 6);console.log('¡Sacaste 6!');
// Tabla del 7console.log('Tabla del 7:');for (let i = 1; i <= 10; i++) { console.log(`7 x ${i} = ${7 * i}`);}⚠️ Nota
Section titled “⚠️ Nota”¡Cuidado con los bucles infinitos! Si la condición nunca se vuelve false, el bucle se ejecutará para siempre y congelará tu programa.
// ❌ Bucle infinito (nunca ejecutes esto)let i = 0;while (i < 5) { console.log('Infinito!'); // falta i++}Siempre asegúrate de que la variable de control se modifique dentro del bucle.
El for clásico es muy flexible. Puedes tener múltiples variables o condiciones:
for (let i = 0, j = 10; i < j; i++, j--) { console.log(`i=${i}, j=${j}`);}Pero para arrays modernos, prefiere for...of (que veremos en la Lección 24) o métodos como .forEach().