If you're seeing this message, it means we're having trouble loading external resources on our website.

Si estás detrás de un filtro de páginas web, por favor asegúrate de que los dominios *.kastatic.org y *.kasandbox.org estén desbloqueados.

Contenido principal

Repetición condicional de instrucciones

A veces no sabemos cuántas veces queremos repetir una instrucción, pero sabemos que queremos parar cuando cierta condición sea verdadera. En un caso como este, los programadores repiten código mediante una construcción de programación como el bucle "while".

El bucle while

Esta es la plantilla general de un bucle while en el lenguaje JavaScript:
while ( <condición> ) {
    <instrucciones>
}
Mientras la <condición> sea verdadera, la computadora sigue repitiendo las <instrucciones>.
Conceptualmente, un bucle while es muy similar a un condicional if, excepto que while se ejecuta continuamente hasta que la condición no sea verdadera, mientras que if solo se ejecuta una vez.
A veces visualizamos un bucle while con diagramas de flujo, similar a la visualización de condicionales:
Diagrama de flujo que inicia en diamante que dice "condición". Flecha etiquetada como "TRUE" va del diamante al rectángulo que dice "instrucciones". Flecha etiquetada como "FALSE" va del diamante al rectángulo que dice "termina bucle". La flecha sin etiqueta va del rectángulo "instrucciones" de vuelta al diamante de "condición".
Vamos a ver un bucle while simple:
var i = 1;
while (i <= 10) {
    println(i);
    i++;
}
📝 Mira código similar en: App Lab | Snap | Python
Ese código imprimirá los números de 1 a 10, y luego cuando i llega 11, y entonces ya no es menor o igual a 10, la computadora para de imprimir el valor de i.
Este ejemplo es simple, pero también es similar a todos los usos de bucles while . Nuestro código a menudo empieza por inicializar una variable (o más de una) antes de while , luego hace referencia a esa variable (o a una relacionada) en la condición, y modifica esa variable de alguna manera en las instrucciones.
Este ejemplo particular de bucle while normalmente se programa como un bucle for, pues de antemano sabemos la frecuencia con que se repite el código. Hay muchas casos en que no sabemos un número exacto de veces para repetir el código.Exploremos ahora uno de esos.

El reproductor de conejos

Imagina que un granjero decide criar conejos, pero le preocupa que se reproduzcan demasiado rápido. El granjero sólo tiene espacio para 100 conejos y quiere saber cuánto tiempo tomará para que sus 2 conejos sean demasiados para la jaula.
Podemos construir un programa que simule continuamente la reproducción de conejos mientras la población sea menor que 100, y que dé seguimiento a los años que tarda.
Este es un primer borrador de ese programa:
var numRabbits = 2;
var numYears = 0;
while (numRabbits <= 100) {
    numRabbits += (numRabbits/2 * 30);
    numYears++;
}
📝 Mira código similar en: App Lab | Snap | Python
Este programa empieza con inicializar la población de conejos a 2 (un par de apareamiento) y el número de años a 0. El bucle while comprueba si el número de conejos es menor que 100. Mientras esa condición sea verdadera, el código dentro del bucle incrementa el número de conejos (según una estimación de cuántas crías pueden tener las hembras cada año) y luego incrementa el número de años.
Después de ejecutar el programa, podemos ver que se estima que tardará solo 2 años, y después de esos 2 años, habrá 512 conejos. ¡Sí, más vale que el granjero construya una jaula más grande, o considere algunas bonitas ovejas lanudas!
✏️ También podemos combinar bucles while con nuestras otras habilidades de programación. El siguiente programa es un reproductor de conejos más avanzado, que utiliza un bucle anidado for y un if para decidir al azar si un conejo tiene una cría hembra o macho. ¡Juega con él, y mira cómo cambian los números cada vez!
📝 Mira código similar en: App Lab | Snap | Python

Cuidado con el bucle infinito

La computadora solo saldrá de un bucle while cuando la condición sea falsa. Pero, ¿qué pasa si nunca es falsa?
Dale un vistazo al siguiente programa:
var i = 0;
while (i < 100) {
   println("It's the loop that never ends.");
   println("Oh yes, it goes on and on, my friends…");
   println("A computer started running it, not knowing what it was...");
   println("And it will continue running it forever just because...");
}
¿Qué crees que ocurrirá? ¡Pruébalo tú mismo! No, espera, ¡no! Es un bucle infinito justo ahí, y es difícil saber cómo lo manejará una computadora. Intentamos detectar y prevenir bucles infinitos en el entorno de programación KA, pero no siempre tenemos éxito, así que es mejor evitarlos.
¿Por qué es infinito el bucle? El programa empieza por inicializar i a 0, y la condición del bucle while es si i es menor que 100. Mientras sea verdadera, muestra la letra de una canción. Pero nada dentro del bucle cambia el valor de i, así que esa condición será siempre verdadera.
Es probable que programes al menos un bucle infinito en tu viaje como programador. Cuando te encuentres mirando un largo flujo de salida mientras escuchas el ventilador de ru computadora, puedes celebrar el evento de tu primer bucle infinito. Después de haber terminado de celebrar (y curar tu computadora), puedes tomar nota de lo que no debes hacer en el futuro. 😉
Comprueba tu comprensión
Mira si puedes detectar los bucles infinitos. ¿Cuál de estos programas tiene uno?
Elige todas las respuestas adecuadas:

Bucles condicionales en pseudocódigo

El pseudocódigo del examen de AP CSP no incluye un bucle while, pero incluye una construcción muy similar: REPEAT UNTIL.
REPEAT UNTIL ( <condición> ) {
    <instrucciones>
}
Este código repetirá las instrucciones hasta que la condición sea finalmente verdadera.
Para convertir un while a un REPEAT UNTIL, normalmente solo necesitamos invertir la condición.
Aquí hay una conversión del bucle simple que muestra los números 1 a 10:
i ← 1
REPEAT UNTIL (i ≥ 11)
{
    DISPLAY(i)
    i ← i + 1
}
Cuando es while , comprobamos si i es menor o igual a 10. Ahora que usamos UNTIL, comprobamos si i es mayor o igual a 11. En este caso, podríamos incluso simplificar esto a sólo comprobar si es igual a 11, ya que no hay forma que i sea mayor que 11 en este código.
Veamos ahora el reproductor de conejos en pseudocódigo:
numRabbits ← 2
numYears ← 0
REPEAT UNTIL (numRabbits > 100) 
{
    numRabbits ← numRabbits + (numRabbits/2 * 30)
    numYears ← numYears + 1
}
Con el bucle while nuestra condición comprueba numRabbits <= 100. Ahora que usamos UNTIL, comprobamos que numRabbits > 100.

🙋🏽🙋🏻‍♀️🙋🏿‍♂️¿Tienes alguna pregunta sobre este tópico? Nos encantaría contestarte; ¡simplemente pregunta en el area de preguntas abajo!

¿Quieres unirte a la conversación?

Sin publicaciones aún.
¿Sabes inglés? Haz clic aquí para ver más discusiones en el sitio en inglés de Khan Academy.