
Anidación en condicionales con COBOL
Capítulo 25: IFs anidados y ELSE IF
Ha llegado el momento de ver el uso de ELSE
combinado con IF
.
ELSE
permite ofrecer una alternativa a un IF
que no se ejecute. Es decir, que en caso de que la condición del IF
de false
, se ejecuta el bloque de código ELSE
. En caso contrario, no.
IDENTIFICATION DIVISION.
PROGRAM-ID. Capitulo25.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
77 Numero1 PIC 99 VALUE 20.
77 Numero2 PIC 99 VALUE 10.
PROCEDURE DIVISION.
Condicionales.
IF Numero1 = 20 AND Numero2 = 10 THEN
DISPLAY "Se ejecuta el IF."
END-IF.
STOP RUN.
END PROGRAM Capitulo25.
Ya sabes de sobra que esta condición devuelve true
.
Se ejecuta el IF.
Si la hacemos false
, ya no se cumple. Es donde entra en juego el bloque ELSE
.
IDENTIFICATION DIVISION.
PROGRAM-ID. Capitulo25.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
77 Numero1 PIC 99 VALUE 20.
77 Numero2 PIC 99 VALUE 10.
PROCEDURE DIVISION.
Condicionales.
IF Numero1 = 10 AND Numero2 = 10 THEN
DISPLAY "Se ejecuta el IF."
ELSE
DISPLAY "Se ejecuta el ELSE."
END-IF
STOP RUN.
END PROGRAM Capitulo25.
Ahora, ha devuelto false
y por lo tanto, se ejecuta el bloque de código del ELSE
. Así de sencillo.
Se ejecuta el ELSE.
IF anidados
Entramos en terreno algo pantanoso. Se puede decir que quizás, lo que vas a ver en este capítulo, no sea la mejor practica del mundo. No obstante, te vas a encontrar código con muchos IF
anidados (IF
que contienen más IF
).
Tómate un tiempo en leer bien línea por línea y agradece la indentación, ya que sin ella, estamos aún más perdidos en esta sopa de IF
. Los comentarios, si te estorban más que ayuda, no lo dudes, suprímelos.
IDENTIFICATION DIVISION.
PROGRAM-ID. Capitulo25.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
77 Numero1 PIC 99 VALUE 20.
77 Numero2 PIC 99 VALUE 10.
PROCEDURE DIVISION.
Condicionales.
*> Inicio del IF primario.
IF Numero1 > 10 THEN
MOVE 15 to Numero1
DISPLAY "Numero1 vale 15"
*> Inicio del IF secundario.
IF Numero1 = 15 AND Numero2 < Numero1
*> Inicio del IF terciario.
IF Numero1 < Numero2
MOVE Numero2 TO Numero1
*> ELSE del IF terciario.
ELSE
MOVE Numero1 TO Numero2
DISPLAY "Ahora, los dos números son iguales."
END-IF
*> Fin del IF terciario.
*> ELSE del IF secundario.
ELSE
DISPLAY "No se ha cumplido la condición del AND."
END-IF
*> ELSE del IF primario.
ELSE
DISPLAY "Numero1 no es mayor que 10."
END-IF
*> Fin del IF primario.
STOP RUN.
END PROGRAM Capitulo25.
Numero1 vale 15.
Ahora, los dos números son iguales.
Estamos ante una estructura de IF
anidados muy simple, esto puede ser brutalmente más complejo, por eso considero que es mejor evitarlos en la medida de lo posible.
Voy a explicarte paso por paso como está funcionando esto con una lista con los números de línea en el código.
- Empieza el
IF
primario. Se cumple su condición. - Se reasigna el valor
15
aNumero1
. - Se imprime en la consola
"Numero1 vale 15"
- Empieza el
IF
secundario. Se cumple su condición. - Empieza el
IF
terciario. No se cumple su condición. Por lo que nos vamos alELSE
sin ejecutar el código de esteIF
. - Empieza el
ELSE
delIF
terciario. - Se reasigna a
Numero2
el valor deNumero1
(15
). - Se imprime el mensaje
"Ahora, los dos números son iguales"
. - Termina el
IF
terciario. - Comienza el
ELSE
delIF
secundario. Este no se ejecuta porque se ejecutó suIF
. - Finaliza el
IF
secundario. - Comienza el
ELSE
delIF
primario. Este no se ejecuta porque se ejecutó suIF
. - Finaliza el
IF
primario.
Como puedes ver, el funcionamiento de solo tres IF
anidados, es muy enrevesado. Imagina si esto fueran 30.
Comentarios
Si te quedan dudas sobre el temario, sobre Cobol, o cualquier otra cosa relacionada o simplemente quieres agradecer, aquí tienes tu sitio para dejar tu granito de arena. Gracias por tus comentarios y por darle vida a este sitio web.