Curso IT Fundamentos JavaScript 042_Bucles while, for
Las sentencias de bucle son métodos para ejecutar repetidamente un bloque de código. JavaScript proporciona diferentes tipos de sentencias de bucle como while, do-while, for, etc.
Un cuerpo de bucle completo incluye: expresión de inicialización, condición de bucle e iterador.
Bucle while
El bucle while se usa para ejecutar repetidamente un segmento de código mientras la condición sea true.
La ejecución única del cuerpo del bucle se llama una iteración.
Cualquier expresión o variable puede ser una condición de bucle, la condición de bucle se evalúa y el resultado se convierte en un valor booleano.
Similar a if, si el cuerpo del bucle tiene solo una sentencia, también se pueden omitir las llaves {…}, pero esto no se recomienda.
Antes de cada iteración se verifica la condición.
Ejemplo:
let i = 0; // Expresión de inicialización, normalmente se usa para declarar la variable contador, si no existe se reportará undefinedwhile (i < 5) { // Condición de bucle, si es `true`, el bucle continuará ejecutándose console.log(i); i++; // Iterador, normalmente se usa para actualizar la variable contador y coincidir con la condición de bucle}Ejemplo de bucle infinito:
let i = 0; while (1) { // La condición siempre es true, entrará en bucle infinito console.log(i); i++; // Normalmente se aplica esta forma de actualización de contador a la condición de bucle if (i >= 5) break; // Comente esto para entrar en modo de bucle infinito}Bucle do-while
El bucle do-while es similar al bucle while, pero primero ejecuta el cuerpo del bucle una vez y luego verifica si la condición es true. Si la condición es verdadera, continúa ejecutando el cuerpo del bucle.
Tenga en cuenta los escenarios de uso: use do-while solo cuando necesite ejecutar al menos una vez el cuerpo del bucle, independientemente de si la condición es verdadera o no. Para otros escenarios, se recomienda el bucle while.
Después de cada iteración se verifica la condición.
Ejemplo:
let i = 0;do { console.log(i); i++;} while (i < 5);Bucle for
El bucle for es una estructura de bucle más compleja pero también la más comúnmente aplicada, utilizada para ejecutar repetidamente un segmento de código.
El bucle for incluye tres partes: expresión de inicialización, condición de bucle e iterador. A continuación se muestra la sintaxis básica del bucle for:
Antes de cada iteración se verifica la condición, se pueden usar otras configuraciones.
Ejemplo:
for (let i = 0; i < 5; i++) { console.log(i);}Ejemplo de bucle infinito:
let i = 0; for ( ; ; ) { // Cuando se omiten todas las condiciones, entrará en bucle infinito console.log(i); i++; // Normalmente se aplica esta forma de actualización de contador a la condición de bucle if (i >= 5) break; // Comente esto para entrar en modo de bucle infinito}Omitir segmentos de sentencias
En el bucle for se puede omitir la expresión de inicialización, la condición de bucle o el iterador, uno o varios, pero los puntos y coma ; deben conservarse. Los puntos y coma se usan para separar cada parte, al omitir una parte aún se necesita conservar el punto y coma correspondiente.
Ejemplo:
let x = 0;for (; x < 5; x++) { console.log(x);}// Se omite la expresión de inicialización y se mueve fuera del bucle, el bucle sigue siendo válido
let y = 0;for (;; y++) { if (y >= 5) { break; } console.log(y);}// Se omite la condición de bucle, el bucle se termina mediante la sentencia `if` y `break`
let z = 0;for (; z < 5;) { console.log(z); z++;}// Se omite el iterador y se mueve al cuerpo del bucle, el bucle sigue siendo válidoBucles anidados
Los bucles anidados significan que dentro de un cuerpo de bucle se contiene otra estructura de bucle completa. Cada vez que se ejecuta el bucle externo, el bucle interno se ejecuta completamente una vez.
Ejemplo de triángulo rectángulo:
// Ejemplo Afor (let i = 1; i <= 5; i++) { // Bucle externo, controla el número de filas, de 1 a 5. let row = ''; // Cada vez que se ejecuta el bucle externo, se crea una cadena vacía `row` para almacenar las estrellas de la fila actual. for (let j = 1; j <= i; j++) { // Bucle interno, controla el número de estrellas por fila, de 1 al número de fila actual `i`. row += '⭐ '; // Añade la estrella a `row`, formando la cadena de estrellas de la fila actual. } console.log(row); // Imprime la cadena de estrellas de la fila actual.}// Ejemplo Bfor (let i = 1; i <= 5; i++) { // Bucle externo representa el número de filas for (let j = 1; j <= i; j++) { // Bucle interno representa las columnas document.write('⭐'); // Usa estrella como elemento gráfico } document.write('</br>'); // Salto de línea}Ejemplo de triángulo invertido:
// Ejemplo Afor (let i = 5; i >= 1; i--) { // Bucle externo, controla el número de filas, de 1 a 5. let row = ''; // Cada vez que se ejecuta el bucle externo, se crea una cadena vacía `row` para almacenar las estrellas de la fila actual. for (let j = 1; j <= i; j++) { // Bucle interno, controla el número de estrellas por fila, de 1 al número de fila actual `i`. row += '* '; // Añade la estrella a `row`, formando la cadena de estrellas de la fila actual. } console.log(row); // Imprime la cadena de estrellas de la fila actual.}// Ejemplo Bfor (let i = 1; i <= 5; i++) { // Bucle externo representa el número de filas for (let j = 0; j <= 5 - i; j++) { // Bucle interno representa las columnas document.write('⭐'); // Usa estrella como elemento gráfico } document.write('</br>'); // Salto de línea}break termina (finaliza, sale) el bucle
break se usa para terminar (finalizar, salir) el bucle actual o sentencia switch. Si no hay break, continuará ejecutando los case posteriores (es decir, ocurre el fenómeno de “penetración”).
La combinación “bucle infinito + break” es adecuada para situaciones donde no es necesario verificar la condición al inicio/final del bucle, pero se necesita verificar la condición en el medio o incluso en múltiples posiciones del cuerpo.
Ejemplo:
let count = 0;while (true) { console.log("En el bucle..."); // Simula una condición, cuando se cumple sale del bucle if (count === 5) { console.log("Condición cumplida, saliendo del bucle"); break; } count++;}continue continúa con la siguiente iteración (salta la actual)
continue se usa para terminar prematuramente la iteración actual en un bucle y continuar con la siguiente iteración.
continue es la “versión ligera” de break. No detiene todo el bucle, sino que detiene solo esta iteración actual y fuerza el inicio de una nueva iteración (si la condición lo permite).
Ejemplo:
for (let i = 0; i < 8; i++) { if (i % 2 === 0) { continue; // Cuando i módulo 2 es igual a 0, salta la iteración actual y continúa con la siguiente iteración } console.log(i);}