DocumentaciónEstructuras Condicionales

Estructuras Condicionales

Las estructuras condicionales permiten que un programa tome decisiones.

Gracias a ellas, BLOX puede:

  • ejecutar una acción cuando se cumple una condición
  • elegir entre dos caminos posibles
  • seleccionar un caso entre varias alternativas
  • reaccionar de manera distinta según los datos de entrada

En otras palabras, las condicionales introducen lógica de decisión dentro del flujo del programa.

SI ... ENTONCES ... SINO ... FIN_SI

La estructura SI es la forma básica de evaluación condicional en BLOX.

Se usa cuando queremos ejecutar un bloque solo si una condición resulta verdadera.

Sintaxis general

ejemplo.blox
SI (condicion) ENTONCES
    // instrucciones si la condicion es verdadera
SINO
    // instrucciones si la condicion es falsa
FIN_SI

La parte SINO es opcional.

Ejemplo simple

ejemplo.blox
FUNCION PRINCIPAL
INICIO

    NUMERICO i

    i = 4

    SI (i < 10) ENTONCES
        i = 10
    SINO
        i = 0
    FIN_SI

    IMPRIMIR(i)

FINAL

En este ejemplo:

  • si i es menor que 10, se le asigna 10
  • en caso contrario, se le asigna 0

SI sin SINO

También puede usarse solo para ejecutar una acción cuando la condición es verdadera.

ejemplo.blox
SI (edad >= 18) ENTONCES
    IMPRIMIR("Mayor de edad")
FIN_SI

Condiciones compuestas

Las condiciones pueden combinar comparaciones y operadores lógicos.

ejemplo.blox
SI (nota >= 60 & asistencia >= 75) ENTONCES
    IMPRIMIR("Aprobado")
SINO
    IMPRIMIR("No aprobado")
FIN_SI

SIEMPRE ... QUE ... OTRO ... FIN_SIEMPRE

La estructura SIEMPRE permite evaluar varios casos en secuencia, de manera parecida a una selección múltiple.

Su forma general es:

ejemplo.blox
SIEMPRE
    QUE (condicion_1)
        // bloque 1
    QUE (condicion_2)
        // bloque 2
    QUE (condicion_3)
        // bloque 3
    OTRO
        // bloque por defecto
FIN_SIEMPRE

Cada cláusula QUE (...) representa un caso posible.
La cláusula OTRO actúa como caso por defecto cuando no se cumple ninguna de las condiciones anteriores.

Ejemplo: cantidad de días de un mes

ejemplo.blox
FUNCION PRINCIPAL
INICIO
    NUMERICO mes, dias

    mes = 2

    SIEMPRE
        QUE (mes == 1 | mes == 3 | mes == 5 | mes == 7 | mes == 8 | mes == 10 | mes == 12)
            IMPRIMIR("Mes de 31 dias")
            dias = 31

        QUE (mes == 4 | mes == 6 | mes == 9 | mes == 11)
            IMPRIMIR("Mes de 30 dias")
            dias = 30

        QUE (mes == 2)
            IMPRIMIR("Mes de 28 o 29 dias")
            dias = 28

        OTRO
            IMPRIMIR("Mes invalido")
            dias = -1
    FIN_SIEMPRE

    IMPRIMIR("\nDias asignados: ", dias)
FINAL

Aquí, BLOX evalúa varias posibilidades para determinar la cantidad de días del mes.

Ejemplo: comparar dos strings

ejemplo.blox
FUNCION PRINCIPAL
INICIO
    NUMERICO es
    STRING str1, str2

    str1 = "Alfa"
    str2 = "Beta"

    es = COMPARAR(str1, str2)

    SIEMPRE
        QUE (es == 0)
            IMPRIMIR("Son iguales")

        QUE (es == 1)
            IMPRIMIR("str1 es mayor")

        QUE (es == -1)
            IMPRIMIR("str1 es menor")

        OTRO
            ERROR("Resultado no esperado")
    FIN_SIEMPRE

FINAL

Este patrón resulta útil cuando una función puede devolver varios valores discretos y queremos reaccionar de forma distinta ante cada uno.

Diferencia entre SI y SIEMPRE

SI

Se usa cuando hay una sola condición principal:

ejemplo.blox
SI (x > 0) ENTONCES
    IMPRIMIR("Positivo")
FIN_SI

SIEMPRE

Se usa cuando hay varios casos alternativos:

ejemplo.blox
SIEMPRE
    QUE (x < 0)
        IMPRIMIR("Negativo")
    QUE (x == 0)
        IMPRIMIR("Cero")
    OTRO
        IMPRIMIR("Positivo")
FIN_SIEMPRE

Cuándo conviene usar cada una

  • Usa SI para decisiones simples.
  • Usa SI ... SINO cuando solo hay dos caminos principales.
  • Usa SIEMPRE ... QUE ... OTRO cuando hay varios casos mutuamente excluyentes o cuando quieres escribir una selección múltiple de forma clara.

Buenas prácticas

  • Mantén las condiciones legibles.
  • Si una condición es muy larga, considera dividirla o calcularla antes en una variable lógica.
  • Usa OTRO cuando quieras dejar un caso por defecto explícito.
  • Prefiere SIEMPRE frente a cadenas largas de decisiones cuando hay varios casos bien definidos.

Errores frecuentes

1. Olvidar el cierre del bloque

Cada estructura debe cerrarse correctamente:

  • SI ... FIN_SI
  • SIEMPRE ... FIN_SIEMPRE

2. Usar SINO donde corresponde OTRO

Dentro de SIEMPRE, el bloque por defecto es:

ejemplo.blox
OTRO

no SINO.

3. Hacer condiciones difíciles de leer

Esto:

ejemplo.blox
SI (a > 0 & b > 0 & c > 0 & d > 0 & e > 0) ENTONCES

puede ser correcto, pero no siempre es la forma más clara.
A veces conviene extraer parte de la lógica a variables intermedias.

Resumen

En BLOX, las estructuras condicionales principales son:

  • SI ... ENTONCES ... FIN_SI
  • SI ... ENTONCES ... SINO ... FIN_SI
  • SIEMPRE ... QUE ... OTRO ... FIN_SIEMPRE

Con ellas, el lenguaje puede expresar:

  • decisiones simples
  • alternativas dobles
  • selección entre múltiples casos

Son una parte esencial del control de flujo y aparecen en prácticamente cualquier programa no trivial.