Curso de Cobol y PowerCobol

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.

  1. Empieza el IF primario. Se cumple su condición.
  2. Se reasigna el valor 15 a Numero1.
  3. Se imprime en la consola "Numero1 vale 15"
  4. Empieza el IF secundario. Se cumple su condición.
  5. Empieza el IF terciario. No se cumple su condición. Por lo que nos vamos al ELSE sin ejecutar el código de este IF.
  6. Empieza el ELSE del IF terciario.
  7. Se reasigna a Numero2 el valor de Numero1 (15).
  8. Se imprime el mensaje "Ahora, los dos números son iguales".
  9. Termina el IF terciario.
  10. Comienza el ELSE del IF secundario. Este no se ejecuta porque se ejecutó su IF.
  11. Finaliza el IF secundario.
  12. Comienza el ELSE del IF primario. Este no se ejecuta porque se ejecutó su IF.
  13. 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.

Programación Fácil YouTube

Suscríbete

Si te ha gustado este curso y crees que el trabajo merece la pena, te agradeceré eternamente que te suscribas a mi canal de YouTube para apoyarme y que pueda seguir haciendo cursos gratuitos.

Además, si te encanta la programación, tienes un montón más de cursos gratuitos para ver.

No solo eso, podrás participar enviándome comentarios con tus sugerencias para temas específicos o cursos completos o incluso las dudas que tengas y las intentaré ir resolviendo en los cursos que estén todavía abiertos.