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
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
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
ies menor que10, se le asigna10 - 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.
SI (edad >= 18) ENTONCES
IMPRIMIR("Mayor de edad")
FIN_SI
Condiciones compuestas
Las condiciones pueden combinar comparaciones y operadores lógicos.
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:
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
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
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:
SI (x > 0) ENTONCES
IMPRIMIR("Positivo")
FIN_SI
SIEMPRE
Se usa cuando hay varios casos alternativos:
SIEMPRE
QUE (x < 0)
IMPRIMIR("Negativo")
QUE (x == 0)
IMPRIMIR("Cero")
OTRO
IMPRIMIR("Positivo")
FIN_SIEMPRE
Cuándo conviene usar cada una
- Usa
SIpara decisiones simples. - Usa
SI ... SINOcuando solo hay dos caminos principales. - Usa
SIEMPRE ... QUE ... OTROcuando 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
OTROcuando quieras dejar un caso por defecto explícito. - Prefiere
SIEMPREfrente 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_SISIEMPRE ... FIN_SIEMPRE
2. Usar SINO donde corresponde OTRO
Dentro de SIEMPRE, el bloque por defecto es:
OTRO
no SINO.
3. Hacer condiciones difíciles de leer
Esto:
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_SISI ... ENTONCES ... SINO ... FIN_SISIEMPRE ... 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.