Saltar al contenido principal

El bucle while

El bucle while permite repetir un bloque de código mientras se cumpla una condición.

A diferencia del bucle for, no necesitamos saber de antemano cuántas veces se repetirá el código. El bucle continuará ejecutándose hasta que la condición deje de ser verdadera.

Por este motivo, while es especialmente útil cuando el número de repeticiones depende de algo que ocurre durante la ejecución del programa.


Explicación

Imagina que estás llenando una botella con agua.

No sabes exactamente cuántos segundos tardará en llenarse.

Lo único que sabes es que debes seguir echando agua mientras la botella no esté llena.

En cuanto la botella se llena, dejas de hacerlo.

El bucle while funciona exactamente igual.

En lugar de indicar un número fijo de repeticiones como hacíamos con el for, le damos una condición.

Mientras esa condición sea verdadera, el código seguirá ejecutándose.

Cuando la condición deje de cumplirse, el bucle terminará automáticamente.

Esta es la principal diferencia respecto al bucle for.

  • Con for, normalmente conocemos el número de repeticiones.
  • Con while, solo conocemos la condición que debe cumplirse para seguir repitiendo.

Sintaxis

La sintaxis del bucle while es muy sencilla, de hecho se puede observar que es muy similar a la del if, ya que ambas trabajan sobre una condición.

while (condición) {
// Código que se repetirá
}

Primero se comprueba la condición.

  • Si es verdadera, se ejecuta el bloque de código.

  • Cuando termina el bloque, la condición vuelve a comprobarse.

Este proceso se repite una y otra vez hasta que la condición sea falsa.


¿Cómo funciona paso a paso?

Observa el siguiente ejemplo.

let numero = 1;

while (numero <= 3) {
console.log(numero);
numero++;
}

Veamos qué ocurre.

Valor de numero¿Se cumple numero <= 3?Se ejecuta
1Se muestra 1 y se incrementa el numero
2Se muestra 2 y se incrementa el numero
3Se muestra 3 y se incrementa el numero
4NoEl bucle termina

Salida:

1
2
3

Es importante observar que la variable cambia dentro del bucle.

Si nunca cambiara, la condición seguiría siendo verdadera para siempre. Por eso será muy importante que dentro del bucle while siempre haya un cambio respecto a la variable de la condición, es esta caso el cabio es numero++.


La variable de control

En la mayoría de los bucles while existe una variable cuyo valor cambia en cada repetición.

A esta variable se le suele llamar variable de control.

let contador = 1;

while (contador <= 5) {
console.log(contador);
contador++;
}

En este ejemplo, contador controla cuándo debe finalizar el bucle.


Ejemplos

Ejemplo 1. Contar del 1 al 5

let numero = 1;

while (numero <= 5) {
console.log(numero);
numero++;
}

Salida:

1
2
3
4
5

Ejemplo 2. Cuenta atrás

let numero = 5;

while (numero >= 1) {
console.log(numero);
numero--;
}

Salida:

5
4
3
2
1

En este caso disminuimos el valor de la variable en cada repetición.


Ejemplo 3. Ahorrar dinero

Una persona guarda 20 € cada semana hasta reunir al menos 100 €.

let ahorro = 0;

while (ahorro < 100) {
ahorro += 20; // en este caso la variable ahorro aumenta en 20€ cada "semana"
console.log(`Ahorro actual: ${ahorro}`);
}

Salida:

Ahorro actual: 20 €
Ahorro actual: 40 €
Ahorro actual: 60 €
Ahorro actual: 80 €
Ahorro actual: 100 €

No sabemos cuántas repeticiones habrá con solo mirar el bucle, pero sí sabemos cuándo terminará.


Ejemplo 4. Vaciar una batería

Con una batería inicial de 100, reduce la batería 25 unidades cada vez hasta que llegue a 0.

let bateria = 100;

while (bateria > 0) {
console.log(`Batería: ${bateria}%`);
bateria -= 25;
}

Salida:

Batería: 100%
Batería: 75%
Batería: 50%
Batería: 25%

El bucle termina cuando la batería deja de ser mayor que cero.


Errores frecuentes

Olvidar modificar la variable de control

let numero = 1;

while (numero <= 5) {
console.log(numero);
}

Este bucle nunca termina porque numero siempre vale 1.

Debemos actualizar la variable.

numero++;

Utilizar una condición incorrecta

let numero = 10;

while (numero < 5) {
console.log(numero);
}

Como la condición es falsa desde el principio, el bucle no se ejecutará ninguna vez.


Modificar la variable equivocada

let numero = 1;
let otro = 0;

while (numero <= 5) {
otro++;
}

La condición depende de numero, pero quien cambia es otro.

Como numero nunca cambia, el bucle será infinito.


Buenas prácticas

  • Utiliza while cuando no conozcas el número exacto de repeticiones.
  • Comprueba que la condición pueda llegar a ser falsa.
  • Modifica la variable de control dentro del bucle.
  • Mantén la condición sencilla y fácil de entender.

Resumen

El bucle while repite un bloque de código mientras una condición sea verdadera.

Es especialmente útil cuando no conocemos de antemano cuántas veces se repetirá el proceso.

Para evitar bucles infinitos es fundamental actualizar correctamente la variable de control y asegurarse de que la condición llegará a ser falsa en algún momento.


Ejemplos resueltos

Ejercicio resuelto 1 - Llenar un depósito

Enunciado

Un depósito contiene 0 litros de agua.

Cada minuto entran 15 litros.

Crea un programa que muestre la cantidad de agua hasta alcanzar o superar los 90 litros.

Análisis

No nos interesa repetir un número fijo de veces.

Lo importante es seguir llenando el depósito mientras todavía no haya alcanzado los 90 litros.

Solución

let litros = 0;

while (litros < 90) {
litros += 15;
console.log(`${litros} litros`);
}

Explicación

La variable litros comienza en cero.

En cada repetición añadimos 15 litros.

Cuando el depósito alcanza los 90 litros, la condición deja de cumplirse y el bucle termina.


Ejercicio resuelto 3 - Ahorrar para un viaje

Enunciado

Una persona ahorra 35 € cada semana.

Quiere reunir al menos 500 € para un viaje.

Calcula cuánto dinero tendrá al finalizar.

Análisis

No necesitamos saber cuántas semanas serán necesarias.

Solo debemos seguir ahorrando mientras no haya alcanzado el objetivo.

Solución

let ahorro = 0;

while (ahorro < 500) {
ahorro += 35;
}

console.log(`Ahorro final: ${ahorro}`);

Explicación

El programa continúa sumando dinero hasta alcanzar o superar los 500 €.

La condición controla automáticamente cuándo debe finalizar el bucle.


El bucle do...while

El bucle do...while permite repetir un bloque de código mientras se cumpla una condición, pero tiene una característica importante: el código se ejecuta al menos una vez.

A diferencia de while, primero se ejecuta el bloque de código y después se comprueba la condición.


Ejemplo do...while

Imagina que estás intentando introducir una contraseña.

Primero tienes que introducir una contraseña al menos una vez. Después, si es incorrecta, puedes volver a intentarlo.

El funcionamiento sería:

  1. Introducir la contraseña.
  2. Comprobar si es correcta.
  3. Si no es correcta, volver a intentarlo.
  4. Repetir hasta introducir la contraseña correcta.

Esto es precisamente lo que permite hacer do...while.

La principal diferencia respecto a while es el momento en el que se comprueba la condición:

  • Con while, primero se comprueba la condición y después se ejecuta el código.
  • Con do...while, primero se ejecuta el código y después se comprueba la condición.

Por tanto, un do...while siempre ejecutará su bloque al menos una vez, incluso aunque la condición sea falsa desde el principio.


Sintaxis

La sintaxis es la siguiente:

do {

// Código que se repetirá

} while (condición);

Primero se ejecuta el bloque que está dentro de do.

Después se comprueba la condición:

  • Si es verdadera, el bloque vuelve a ejecutarse.
  • Si es falsa, el bucle termina.

Observa que hay un ; después de la condición del while.


¿Cómo funciona paso a paso?

Observa el siguiente ejemplo:

let numero = 1;

do {

console.log(numero);
numero++;

} while (numero <= 3);

El funcionamiento sería:

Valor de numeroSe ejecuta el código¿Se cumple numero <= 3?
1Se muestra 1 y aumenta a 2
2Se muestra 2 y aumenta a 3
3Se muestra 3 y aumenta a 4
4No se ejecutaNo

Salida:

1
2
3

La diferencia importante es que el código se ejecuta antes de comprobar la condición.

Por ejemplo:

let numero = 10;

do {

console.log(numero);

} while (numero < 5);

Aunque numero < 5 es falso desde el principio, se mostrará:

10

Después se comprueba la condición, se obtiene false y el bucle termina. Pero almenos se habrá mostrado una vez.


Diferencia entre while y do...while

Los dos bucles sirven para repetir código mientras se cumpla una condición, pero funcionan de forma diferente.

Con while:

let numero = 10;

while (numero < 5) {

console.log(numero);

}

No se muestra nada porque la condición es falsa antes de entrar al bucle.

Con do...while:

let numero = 10;

do {

console.log(numero);

} while (numero < 5);

Se muestra:

10

Por tanto:

  • while puede ejecutarse 0 o más veces.
  • do...while se ejecuta 1 o más veces.

Esta diferencia es especialmente importante cuando necesitamos que una determinada acción ocurra al menos una vez.


Ejemplo. Pedir una contraseña

Imaginemos que queremos pedir una contraseña hasta que el usuario introduzca la correcta.

let contraseña;

do {

contraseña = "1234"; // Simulamos la entrada del usuario

} while (contraseña !== "1234");

console.log("Contraseña correcta");

Primero se pide la contraseña y después se comprueba si es correcta.

Si no lo fuera, el código volvería a ejecutarse.


¿Cuándo utilizar do...while?

do...while es especialmente útil cuando necesitamos ejecutar una acción al menos una vez y después queremos decidir si debe repetirse.

Algunos ejemplos pueden ser:

  • Mostrar un menú y volver a mostrarlo hasta que el usuario elija salir.
  • Pedir un dato al usuario hasta que sea válido.
  • Realizar un intento y repetirlo si no se consigue el resultado esperado.
  • Solicitar una contraseña hasta que sea correcta.