En la entrada anterior, aprendimos a crear bifurcaciones en nuestros programas con las estructuras condicionales. Ahora, vamos a explorar la segunda herramienta fundamental del control del flujo: las estructuras repetitivas, más conocidas como bucles.
Un bucle es una estructura que nos permite ejecutar un bloque de código una y otra vez mientras se cumpla una determinada condición, ahorrándonos tener que escribir la misma instrucción cientos de veces.
¿Por qué necesitamos los bucles? 🔁
Imagina que necesitas mostrar un saludo en pantalla cinco veces. Sin bucles, tu código sería así:
Escribir "Hola"
Escribir "Hola"
Escribir "Hola"
Escribir "Hola"
Escribir "Hola"
Es repetitivo y poco práctico. ¿Y si tuvieras que hacerlo mil veces? Un bucle resuelve esto de forma elegante. Cada ejecución del bloque de código dentro del bucle se conoce como iteración.
Existen varios tipos de bucles, cada uno adaptado a un tipo de problema diferente. Vamos a ver los tres más importantes.
La anatomía de un bucle: cabecera y cuerpo 🏗️
Todo bucle, sin importar su tipo, se compone de dos partes fundamentales que debemos saber identificar: la cabecera y el cuerpo.
1. La cabecera
La cabecera es la línea o conjunto de líneas iniciales que controlan el funcionamiento del bucle. Es, por así decirlo, el «cerebro» de la repetición. Su responsabilidad es definir la condición que determinará cuántas veces y bajo qué circunstancias se ejecutará el código.
- En un bucle 
para, la cabecera es la línea que define el contador, la condición de fin y el incremento (ej:Para contador desde 1 hasta 5). - En un bucle 
mientras, la cabecera es la línea que contiene la condición de permanencia (ej:Mientras (intento_usuario != clave_correcta)). 
2. El cuerpo
El cuerpo es el bloque de instrucciones que se repite en cada iteración. Es el «trabajo» que el bucle tiene que realizar. Generalmente, es el código que aparece indentado o delimitado por las palabras clave de inicio y fin del bucle (FinPara, FinMientras, etc.).
Veámoslo con un ejemplo claro:
Proceso SaludoMultiple
    Para contador desde 1 hasta 5  <-- ESTA ES LA CABECERA
    
        Escribir "Hola"           <-- ESTE ES EL CUERPO
    
    FinPara
    
FinProceso
Identificar estas dos partes es esencial. La cabecera controla el flujo y la lógica de la repetición, mientras que el cuerpo contiene las acciones que queremos automatizar.
El bucle para (controlado por contador) 🔢
El bucle para (o for en inglés) es la elección perfecta cuando sabemos de antemano exactamente cuántas veces queremos que se repita una acción. Su estructura se basa en una variable que actúa como contador, incrementándose en cada iteración hasta alcanzar un límite.
Veamos cómo resolveríamos el saludo anterior con un bucle para:
Proceso SaludoMultiple
    Para contador desde 1 hasta 5
        Escribir "Hola"
    FinPara
FinProceso
Este código es mucho más conciso y escalable. Si quisiéramos mil saludos, solo tendríamos que cambiar el 5 por 1000.
El bucle mientras (controlado por condición) 🤔
El bucle mientras (o while en inglés) es ideal cuando no sabemos cuántas veces se debe repetir el código, pero sí conocemos la condición que debe cumplirse para que se siga ejecutando.
El bucle comprueba la condición al principio de cada iteración. Si es verdadera, ejecuta el código. Si es falsa, el bucle termina.
Un ejemplo clásico es pedir una contraseña al usuario hasta que la introduzca correctamente:
Proceso ValidarClave
    clave_correcta = "1234"
    Escribir "Introduce tu contraseña:"
    Leer intento_usuario
    Mientras (intento_usuario != clave_correcta)
        Escribir "Contraseña incorrecta. Inténtalo de nuevo:"
        Leer intento_usuario
    FinMientras
    Escribir "¡Acceso concedido!"
FinProceso
El bule se repetirá un número indeterminado de veces hasta que la condición intento_usuario != clave_correcta se vuelva falsa.
El bucle hacer-mientras ✨
Existe una variante del bucle mientras con una diferencia crucial en su funcionamiento: el bucle hacer-mientras (o do-while).
La principal diferencia es que, mientras el bucle mientras evalúa la condición antes de cada iteración, el bucle hacer-mientras la evalúa después. Esto tiene una consecuencia muy importante: el código dentro de un bucle hacer-mientras se ejecutará al menos una vez, garantizado.
Es la herramienta perfecta para situaciones en las que necesitas que una acción se realice primero y luego se decida si se debe repetir. El caso de uso más típico es un menú de opciones para un usuario.
Proceso MostrarMenu
    Hacer
        Escribir "--- MENÚ ---"
        Escribir "1. Iniciar nueva partida"
        Escribir "2. Cargar partida"
        Escribir "3. Salir"
        Escribir "Elige una opción:"
        Leer opcion_elegida
    Mientras (opcion_elegida != "3")
    Escribir "¡Hasta pronto!"
FinProceso
En este ejemplo, el menú se muestra siempre la primera vez. Solo después de que el usuario elige una opción, el programa comprueba si la opción fue «3». Si no lo fue, el bucle se repite y el menú vuelve a mostrarse. Si fue «3», el bucle termina.
El bucle para cada (controlado por colección) 🗃️
Este bucle, conocido como for-each, es una variante del bucle para especializada en recorrer los elementos de una colección de datos (como una lista, un concepto que pronto veremos en detalle).
Su gran ventaja es la simplicidad. Le dices al programa: «para cada elemento que haya en esta colección, haz esto». No necesitas gestionar un contador manualmente.
Imagina que tienes una lista de nombres de invitados y quieres saludarlos a todos:
Proceso SaludarInvitados
    lista_invitados = ["Ana", "Luis", "Marta"]
    Para cada nombre en lista_invitados
        Escribir "Bienvenido/a, " + nombre
    FinPara
FinProceso
El bucle se ejecutará automáticamente tres veces. En cada iteración, la variable nombre tomará el valor de uno de los elementos de la lista.
Conclusión
Los bucles son una herramienta indispensable que nos permite automatizar tareas repetitivas de forma eficiente. Dominar cuándo usar cada tipo de bucle nos hará mejores programadores:
- Bucle 
para: Cuando sabes el número exacto de repeticiones. - Bucle 
mientras: Cuando la ejecución y/o repetición depende de una condición que puede cambiar. - Bucle 
hacer-mientras: Parecido al anterior pero la condición aparece al final del cuerpo del bucle. - Bucle 
para cada: Cuando necesitas procesar todos los elementos de una colección. 
Ya sabemos tomar decisiones y repetir acciones. Estamos muy cerca de poder construir algoritmos realmente complejos. En la próxima entrada, hablaremos de un concepto crucial para la robustez de nuestros programas: la gestión de errores.


Deja una respuesta