En nuestros programas, así como en nuestra vida, a veces necesitamos tomar una decisión que cambie el curso de ejecución. Vimos que la ejecución de nuestros algoritmos se va resolviendo en forma secuencial, siguiendo las instrucciones una a una. Si bien esta forma nos permite resolver un problema a través de una serie de pasos ordenados, a veces necesitamos un poco más de potencia. Por ejemplo, ¿qué pasaría si quisiéramos hacer una tarea sólo si se da un resultado?
Una de la tareas más comunes que realizamos como programadoras y programadores es evaluar una condición y, en función de su resultado, ejecutamos uno u otro bloque de código.
La forma más simple de cambiar la ejecución lineal de nuestros programas es haciendo uso de la sentencia if
. Veamos su forma general para poder analizarla y entender cómo se usa.
// ... código anterior
if (*condición*) then
// bloque de sentencias
endif
// resto del código ...
¿Cómo se lee este bloque de código? Si se cumple la condición entonces ejecuto el bloque de sentencias. En términos programáticos, la computadora realiza la siguiente serie de pasos:
Primero, evalúa si la condición es true
y en ese caso la ejecución continúa en el bloque de sentencias. Caso contrario, la ejecución continúa en la línea siguiente fuera del bloque if
.
Hasta acá resulta sencillo. Pero un ejemplo, puede ayudar a aclarar. Retomemos el programa que debíamos hacer para obtener el resultado de dividir dos números. Cuando lo hicimos, debíamos restringir su uso para que no fallara, pues funcionaba correctamente siempre que el segundo operando no fuera un 0, dado que no podemos dividir por 0. Veamos cómo era el código.
ALGORITHM DividirDosNumeros
float a;
float b;
float resultado;
print("Ingrese el primer número: ");
scan(a);
print("Ingrese el segundo número: ");
scan(b);
resultado = a / b;
print("El resultado de ",a,"/",b," es: ",resultado);
END
Ahora podemos usar nuestra nueva sentencia if
para decirle a nuestra computadora que sólo debe intentar calcular el resultado si el valor de b
es distinto de 0
. Veamos cómo queda la nueva solución.
ALGORITHM DividirDosNumerosSoloSiSePuede
float a;
float b;
float resultado;
print("Ingrese el primer número: ");
scan(a);
print("Ingrese el segundo número: ");
scan(b);
if (b > 0) then
resultado = a / b;
print("El resultado de ",a,"/",b," es: ",resultado);
endif
END
Ahora, luego de declarar las variables (a
, b
y resultado
) y de pedir sus valores, nuestro programa indica a la computadora que verifique si el valor almacenado en b
es mayor que 0
(también podría haber preguntado si es distinto a 0
) y entonces asigne el cálculo de la división en resultado
e imprima el mensaje.
Si en b
tuviéramos guardado un 0
, el programa continuará su ejecución en la línea siguiente al endif, que casualmente es el final del programa. No habrá calculo ni mensaje. ¡Genial! ¿No?
Bueno, no tanto… Quizás, en este ejemplo, sería bueno indicarle a la persona usuaria que no hemos podido hacer el cálculo requerido, es decir, hacer algo alternativo cuando la condición es evaluada como false
. Buenas noticias: cada if puede tener una sentencia else
para los casos falsos. ¿Cómo se usa? La sentencia if
funciona en conjunto con la sentencia else
para permitirnos mayor control sobre nuestra ejecución, y se escribe de la siguiente forma:
// código anterior
if (*condición*) then
// bloque de sentencias para caso true
else
// bloque de sentencias para caso false
endif
// resto del código
Este bloque de código se lee: si la condición es verdadera, entonces ejecuto el bloque de sentencias true, sino ejecuto el bloque de sentencias false.
<aside>
⚠️ ¡Importante! Cada bloque if
puede tener sólo un bloque else
y un bloque else
no puede existir si no tiene un bloque if
con el cual emparejarse.
</aside>
Ahora podemos retomar nuestro ejemplo y agregar una tarea a ejecutar en caso que la condición no se cumpla, para luego retomar el curso normal del programa.
ALGORITHM DividirDosNumerosSoloSiSePuede
float a;
float b;
float resultado;
print("Ingrese el primer número: ");
scan(a);
print("Ingrese el segundo número: ");
scan(b);
if (b > 0) then
resultado = a / b;
print("El resultado de ",a,"/",b," es: ",resultado);
else
print("Es imposible dividir ",a," por 0.");
endif
END