Introducción a la programación

Condiciones anidadas y compuestas: control de flujo (2)

En la entrada anterior, aprendimos a usar las estructuras condicionales para que nuestros programas pudieran tomar decisiones y seguir un camino u otro. Ahora, vamos a llevar esa lógica un paso más allá para manejar condiciones anidadas y condiciones compuestas, con escenarios más complejos y realistas. ¿Qué pasa si necesitamos comprobar varias condiciones a la vez?

Veamos las técnicas que podemos aplicar.

1. El anidamiento: una condición dentro de otra 🪆

Anidar significa, simplemente, colocar una estructura de control dentro de otra. Un condicional anidado es una estructura Si... Entonces que se encuentra dentro del bloque de otra estructura Si... Entonces.

Esto crea una especie de «filtro» secuencial. El programa primero evalúa la condición externa y, solo si esta es verdadera, pasa a evaluar la condición interna.

Ejemplo: Para entrar a una zona VIP de un evento, una persona debe ser mayor de edad y, además, tener una pulsera especial.

Fragmento de código

Proceso AccesoVIPAnidado
    Leer edad
    Leer tiene_pulsera // Esto sería un valor booleano: verdadero o falso

    Si (edad >= 18) Entonces
        // Si llega aquí, ya sabemos que es mayor de edad.
        // Ahora comprobamos la segunda condición.
        Si (tiene_pulsera == verdadero) Entonces
            Escribir "Acceso VIP concedido. ¡Disfrute!"
        SiNo
            Escribir "Acceso denegado. No tiene la pulsera VIP."
        FinSi
    SiNo
        Escribir "Acceso denegado. Debe ser mayor de edad."
    FinSi
FinProceso

El anidamiento es útil cuando las acciones a realizar dependen del punto en que falla la comprobación.

2. Condiciones compuestas: múltiples revisiones en una línea 🔗

Una condición compuesta nos permite evaluar múltiples expresiones lógicas en una sola cabecera Si utilizando los operadores lógicos que ya conocemos (Y, O).

  • Operador Y (AND): Exige que todas las condiciones sean verdaderas.
  • Operador O (OR): Le basta con que al menos una de las condiciones sea verdadera.

Ejemplo: Resolvamos el mismo problema del acceso VIP, pero con una condición compuesta.

Fragmento de código

Proceso AccesoVIPCompuesto
    Leer edad
    Leer tiene_pulsera

    Si (edad >= 18 Y tiene_pulsera == verdadero) Entonces
        Escribir "Acceso VIP concedido. ¡Disfrute!"
    SiNo
        Escribir "Acceso denegado. No cumple todos los requisitos."
    FinSi
FinProceso

Este código es mucho más compacto y, en muchos casos, más fácil de leer.

De anidado a compuesto: guía de simplificación ✅

Como hemos visto, a menudo podemos lograr el mismo resultado usando anidamiento o condiciones compuestas. Una habilidad clave en programación es saber cuándo podemos simplificar una estructura anidada para hacerla más legible y compacta. Veamos los dos patrones principales.

1. Simplificación con el operador Y (AND)

Este es el caso más directo. Cuando tienes una estructura Si dentro de otra Si, significa que ambas condiciones deben cumplirse para que se ejecute el código interno. Esto es, por definición, una operación Y.

Patrón anidado:

Fragmento de código

// Para acceder, debes ser mayor de edad Y tener una entrada.
Si (edad >= 18) Entonces
    Si (tiene_entrada == verdadero) Entonces
        Escribir "Acceso concedido."
    FinSi
FinSi

Equivalencia simplificada con Y:

Fragmento de código

Si (edad >= 18 Y tiene_entrada == verdadero) Entonces
    Escribir "Acceso concedido."
FinSi

Ambos bloques de código son funcionalmente idénticos, pero el segundo es más directo y fácil de leer.

2. Simplificación con el operador O (OR)

Este patrón es un poco diferente. Se da cuando una acción se ejecuta si se cumple una condición, o si no, se comprueba una segunda condición que también lleva a la misma acción.

Patrón anidado:

Fragmento de código

// Tienes descuento si eres estudiante, o si no, si eres jubilado.
Si (es_estudiante == verdadero) Entonces
    Escribir "Descuento aplicado."
SiNo
    Si (es_jubilado == verdadero) Entonces
        Escribir "Descuento aplicado."
    FinSi
FinSi

Como puedes ver, el bloque Escribir "Descuento aplicado." se repite. Esto es una señal de que podemos simplificar. La lógica es: «aplica el descuento si la persona es estudiante O si es jubilada».

Equivalencia simplificada con O:

Fragmento de código

Si (es_estudiante == verdadero O es_jubilado == verdadero) Entonces
    Escribir "Descuento aplicado."
FinSi

De nuevo, el resultado es el mismo, pero hemos eliminado la anidación y el código duplicado, dejando una única condición mucho más clara y mantenible.

Conclusión

Dominar tanto el anidamiento como las condiciones compuestas te dará una enorme flexibilidad para modelar cualquier tipo de lógica.

  • Usa el anidamiento para crear filtros secuenciales donde cada paso depende del anterior y las acciones a realizar son diferentes en cada nivel.
  • Usa las condiciones compuestas para validar múltiples reglas de una sola vez, manteniendo tu código conciso.
  • Y recuerda siempre la regla de oro: si puedes simplificar un anidamiento a una condición compuesta sin perder lógica, ¡hazlo! Tu «yo» del futuro te lo agradecerá.


Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.