Curso de Cobol y PowerCobol

¿Cómo funciona el condicional IF en COBOL?

Capítulo 20: El condicional IF

Ha llegado el momento de empezar a aprender sobre como funcionan las estructuras de control de flujo en COBOL. En concreto, vamos a empezar con los condicionales. El condicional IF.

¿Qué son las estructuras de control de flujo?

Las estructuras de control de flujo, permiten ejecutar el programa de forma diferente al flujo habitual, que es de arriba a abajo. Por ejemplo, con los condicionales podemos tener cierto código que no se ejecutará nunca si no se cumple una determinada condición. De esta forma, se dará un salto y se omitirá ese código.
Es mucho más sencillo de lo que parece, veamos unos ejemplos.

El condicional IF

El condicional IF, contendrá un bloque de código que se va a ejecutar si su condición devuelve un valor booleano de true, es decir, si su condición es verdadera.

En cambio, si es false, no se va a ejecutar nada de ese bloque, se omitirá.

Del siguiente programa, ¿cuál de los dos IF se va a ejecutar? (qué condición es verdadera).

Esto lo podemos ver a simple vista, es pura lógica que te mostré en el capítulo anterior. No hace falta ni compilar.
La primera condición dice que 10 es mayor que 50. Esto es falso. Sin embargo, la segunda condición, dice que 10 es menor que 50. Esto es verdadero, y por lo tanto, se ejecuta todo el código que contenga el IF. En este caso, es solo un DISPLAY, pero podría ser un montón de código.

⁠⁠       IDENTIFICATION DIVISION.
       PROGRAM-ID. Capitulo20.

       ENVIRONMENT DIVISION.
       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.

       PROCEDURE DIVISION.

       Condicionales.
      *> Primer IF.
       IF 10 > 50 THEN
           DISPLAY "Se ejecuta el primer IF."
       END-IF.

      *> Segundo IF.
       IF 10 < 50 THEN
           DISPLAY "Se ejecuta el segundo IF."
       END-IF.

       STOP RUN.

       END PROGRAM Capitulo20.
Se ejecuta el segundo IF.

Estructura del condicional IF

El condicional IF, está preparado para funcionar solo en la PROCEDURE DIVISION. Este empieza por la palabra IF. Se establece una condición y después de ella, escribimos la palabra THEN. Después de esto, añade todo el código que necesites. Puede haber un programa completo dentro de un IF. Por ejemplo, podrías añadirle el código de un menú y que se ejecutasen las opciones que el usuario le indicase. Esto es adelantarse mucho, pero ves imaginando las posibilidades.
El IF, finaliza con END-IF y un punto.

Fíjate que en todo el IF, solo va un punto al final, el resto de líneas no llevan punto.

Podemos utilizar variables en lugar de valores literales, de modo que el programa vaya cambiando según estas variables.

⁠⁠       IDENTIFICATION DIVISION.
       PROGRAM-ID. Capitulo20.

       ENVIRONMENT DIVISION.
       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
       01 Numero1 PIC 99 VALUE 10.
       01 Numero2 PIC 99 VALUE 50.

       PROCEDURE DIVISION.

       Condicionales.
      *> Primer IF.
       IF Numero1 > Numero2 THEN
           DISPLAY "Se ejecuta el primer IF."
       END-IF.

      *> Segundo IF.
       IF Numero1 < Numero2 THEN
           DISPLAY "Se ejecuta el segundo IF."
       END-IF.

       STOP RUN.

       END PROGRAM Capitulo20.

El resultado es el mismo, aunque utilizo variables, los valores en estas son los mismos del ejemplo anterior.

Se ejecuta el segundo IF.

Hagamos alguna comparación más para practicar.

Voy a crear una tercera variable que sea igual que Numero1.

01 Numero1 PIC 99 VALUE 10.
01 Numero2 PIC 99 VALUE 50.
01 Numero3 PIC 99 VALUE 10.
IF Numero1 = Numero3 THEN
DISPLAY "Se ejecuta este IF."
END-IF.

¿Es verdadero o falso?

Puesto que 10 es igual a 10, se ejecuta el IF.

Se ejecuta este IF.

Probemos los operadores que nos quedan del capítulo anterior, el mayor o igual que y menor o igual que.

⁠⁠       IDENTIFICATION DIVISION.
       PROGRAM-ID. Capitulo20.

       ENVIRONMENT DIVISION.
       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
       01 Numero1 PIC 99 VALUE 10.
       01 Numero2 PIC 99 VALUE 50.
       01 Numero3 PIC 99 VALUE 10.

       PROCEDURE DIVISION.

       Condicionales.
      *> Primer IF.
       IF Numero1 <= Numero3 THEN
           DISPLAY "Se ejecuta el primer IF."
       END-IF.

      *> Segundo IF.
       IF Numero1 >= Numero2 THEN
           DISPLAY "Se ejecuta el segundo IF."
       END-IF.

       STOP RUN.

       END PROGRAM Capitulo20.

Aquí no aparece, pero el operador <= o >= se transforma en esto los equivalentes , .

En este caso, se ejecuta solo el primer IF, ya que Numero1 es menor o igual, en este caso es igual. Si el Numero1 es menor que el Numero3, también se cumple la condición.

El segundo IF, no se ejecuta porque Numero1 ni es mayor ni es igual a Numero2.

Se ejecuta el primer IF.

En COBOL sorprende que aparte de los operadores que acabas de ver, que son los básicos en la mayoría de lenguajes de programación, tengan también su adaptación en palabras reservadas del lenguaje, esta es una de sus cosas más criticadas, que tenga tantas palabras reservadas. No obstante, la intención es buena, ya que está pensado para que sea más legible por las personas. En muchos casos, con COBOL da la impresión que estamos escribiendo un texto en inglés. No sé a tí, pero a mi me encantan estas cosas que hacen único al lenguaje COBOL.

⁠⁠       IDENTIFICATION DIVISION.
	   PROGRAM-ID. Capitulo20.

       ENVIRONMENT DIVISION.
       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
       01 Numero1 PIC 99 VALUE 7.
       01 Numero2 PIC 99 VALUE 50.
       01 Numero3 PIC 99 VALUE 10.

       PROCEDURE DIVISION.

       Condicionales.
      *> Primer IF.
       IF Numero1 LESS Numero3 THEN
           DISPLAY "Se ejecuta el primer IF."
       END-IF.

      *> Segundo IF.
       IF Numero1 LESS OR EQUAL Numero2 THEN
           DISPLAY "Se ejecuta el segundo IF."
       END-IF.

       STOP RUN.

       END PROGRAM Capitulo20.

Se ejecutan los dos IF, puesto que ahora Numero1, es menor que Numero3 (le he cambiado el valor). También, Numero1 es menor o igual a Numero2.

Se ejecuta el primer IF.
Se ejecuta el segundo IF.

La palabra LESS representa el símbolo menor que. EQUAL, igual que.

Para el mayor que o mayor o igual que, aquí tienes las palabras. GREATER para mayor que.

IF Numero1 GREATER Numero3 THEN
IF Numero1 GREATER OR EQUAL Numero2 THEN

COBOL tiene muchas posibilidades, podemos hasta incluso realizar operaciones sobre la propia condición:

IF Numero1 + Numero3 EQUAL Numero2 THEN

Aquí, lo que se está expresando es si los valores de Numero1 + Numero3 son iguales al valor de Numero3, que se ejecute el IF.

Incluso, se nos permite establecer prioridades de cálculo como hacemos en matemáticas, con el paréntesis.

IF Numero1 < (Numero1 + Numero3) * Numero2 / Numero1 THEN

Aquí las reglas son las mismas de matemáticas. Por defecto, se realizan primero las operaciones de división y multiplicación. Tienen prioridad sobre la suma y la resta. En este caso, le doy prioridad a la suma con los paréntesis.

Todo esto de los condicionales, editando código, puede parecer algo inútil, pero cuando sea el usuario el que vaya realizando acciones, los condicionales le ofrecerán a tu programa caminos por los que ir, no será un programa estático que hace siempre lo mismo.


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.