Lección 23: break y continue
🧠 Concepto
Section titled “🧠 Concepto”Dentro de los bucles, a veces necesitamos interrumpir el flujo normal. Para eso existen break y continue. También veremos las etiquetas (labels) para controlar bucles anidados.
break — Salir del bucle
Section titled “break — Salir del bucle”break termina el bucle por completo. La ejecución continúa en la línea siguiente al bucle.
for (let i = 0; i < 10; i++) { if (i === 5) { break; // sale del bucle cuando i es 5 } console.log(i);}// Salida: 0 1 2 3 4Usos comunes:
- Buscar un elemento y detenerse al encontrarlo.
- Validar datos hasta encontrar un error.
- Salir de un bucle infinito controlado.
continue — Saltar a la siguiente iteración
Section titled “continue — Saltar a la siguiente iteración”continue salta el resto del código en la iteración actual y pasa a la siguiente.
for (let i = 0; i < 10; i++) { if (i % 2 === 0) { continue; // salta los números pares } console.log(i);}// Salida: 1 3 5 7 9Usos comunes:
- Omitir valores no deseados.
- Procesar solo elementos que cumplen cierta condición.
Etiquetas (labels) para bucles anidados
Section titled “Etiquetas (labels) para bucles anidados”Cuando tienes bucles dentro de bucles, break solo afecta al bucle más interno. Con etiquetas puedes controlar qué bucle quieres interrumpir.
externo: for (let i = 0; i < 3; i++) { interno: for (let j = 0; j < 3; j++) { if (i === 1 && j === 1) { break externo; // sale del bucle externo } console.log(`i=${i}, j=${j}`); }}// Salida: i=0,j=0 i=0,j=1 i=0,j=2 i=1,j=0💻 Ejemplo
Section titled “💻 Ejemplo”// break: buscar un producto en inventariolet inventario = [ { id: 1, nombre: 'Laptop', disponible: false }, { id: 2, nombre: 'Mouse', disponible: true }, { id: 3, nombre: 'Monitor', disponible: false }, { id: 4, nombre: 'Teclado', disponible: true }];
console.log('Buscando primer producto disponible:');for (let i = 0; i < inventario.length; i++) { if (inventario[i].disponible) { console.log(`Encontrado: ${inventario[i].nombre}`); break; // deja de buscar }}
// continue: procesar solo productos disponiblesconsole.log('\nProductos disponibles:');for (let prod of inventario) { if (!prod.disponible) { continue; // salta los no disponibles } console.log(`✓ ${prod.nombre}`);}
// Labels: buscar en matrizlet matriz = [ [1, 2, 3], [4, 5, 6], [7, 8, 9]];
let objetivo = 5;let encontrado = false;
busqueda: for (let i = 0; i < matriz.length; i++) { for (let j = 0; j < matriz[i].length; j++) { if (matriz[i][j] === objetivo) { console.log(`Encontrado ${objetivo} en [${i}][${j}]`); encontrado = true; break busqueda; // sale de ambos bucles } }}📝 Ejercicio
Section titled “📝 Ejercicio”- Crea un archivo
break-continue.js. - Usa un
fordel 1 al 20 y concontinuesalta los múltiplos de 3. Imprime solo los demás. - Usa un
forpara recorrer un array de números y conbreakdetente al encontrar un número negativo. - Crea un bucle anidado (tabla de 5x5) y usa una etiqueta para salir cuando el producto de los índices sea 12.
- Simula un juego donde lanzas un dado hasta que saques un 6, usando
break.
// Saltar múltiplos de 3console.log('Números no múltiplos de 3:');for (let i = 1; i <= 20; i++) { if (i % 3 === 0) continue; console.log(i);}
// Detenerse en número negativolet datos = [5, 8, 12, -3, 20, 7];console.log('\nProcesando hasta encontrar negativo:');for (let num of datos) { if (num < 0) { console.log('¡Negativo encontrado!'); break; } console.log(num);}
// Etiqueta en bucle anidadoexterno: for (let i = 1; i <= 5; i++) { for (let j = 1; j <= 5; j++) { if (i * j === 12) { console.log(`\nEncontrado: ${i} x ${j} = 12`); break externo; } console.log(`${i}x${j}=${i * j}`); }}
// Juego de dadoconsole.log('\nLanzando dado hasta sacar 6:');while (true) { let dado = Math.floor(Math.random() * 6) + 1; console.log('🎲', dado); if (dado === 6) { console.log('¡Ganaste!'); break; }}⚠️ Nota
Section titled “⚠️ Nota”Las etiquetas (labels) son raramente usadas en JavaScript moderno. Muchos desarrolladores las evitan porque pueden hacer el código menos legible. En la mayoría de los casos, puedes refactorizar el código para evitar bucles anidados con etiquetas. Úsalas con moderación.
Un patrón común con break y while(true):
// Bucle hasta que se cumpla una condición complejawhile (true) { let respuesta = prompt('¿Cuál es la capital de México?'); if (respuesta.toLowerCase() === 'ciudad de méxico') { console.log('¡Correcto!'); break; } console.log('Intenta de nuevo...');}Esto es más limpio que tener la condición en el while cuando la lógica de salida está en medio del bucle.