
¿Cómo funciona el condicional IF en COBOL?
Capítulo 21: Evaluación de tipos de datos y CLASS
En esta ocasión, vas a ver como crear evaluaciones de tipos de datos y lo que son las clases (CLASS) de COBOL, es decir, por ejemplo, que si una variable es de tipo numérico, que se ejecute el IF, en lugar de especificar expresiones con valores como vimos en el capítulo anterior.
Tipo de dato IS NUMERIC
Empecemos con IS NUMERIC
. Gracias a esto, podemos crear condiciones en base a que el tipo de dato de una variable sea numérico, sin importar su valor.
IDENTIFICATION DIVISION.
PROGRAM-ID. Capitulo21.
ENVIRONMENT DIVISION.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 Numero1 PIC 99 VALUE 7.
PROCEDURE DIVISION.
Condicionales.
IF Numero1 IS NUMERIC THEN
DISPLAY "Se ejecuta el IF."
END-IF.
STOP RUN.
END PROGRAM Capitulo21.
Dado que Numero1
contiene un valor numérico, se cumple la condición y se ejecuta el IF
.
Se ejecuta el IF.
Esto evalúa el valor de la variable. Por ejemplo, aunque tengamos un número como string en una variable alfanumérica (X
) o alfabética (A
), nos va a dar true, ya que va a detectar que la variable contiene un valor numérico.
Si el valor contiene números y letras, ya no es numérico, sería alfanumérico y por lo tanto, nos daría false.
01 Numero1 PIC XXXX VALUE "7".
Tipo de dato IS ALPHABETIC
Con IS ALPHABETIC
, podemos evaluar los valores alfabéticos, solo letras.
IDENTIFICATION DIVISION.
PROGRAM-ID. Capitulo21.
ENVIRONMENT DIVISION.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 Texto1 PIC X(16) VALUE "Esto es un texto".
PROCEDURE DIVISION.
Condicionales.
IF Texto1 IS ALPHABETIC THEN
DISPLAY "Se ejecuta el IF."
END-IF.
STOP RUN.
END PROGRAM Capitulo21.
Se ejecuta el IF.
Ten en cuenta, que en este caso, si tenemos una variable de tipo texto con un valor numérico, aunque esté entre comillas, la condición da false
.
IDENTIFICATION DIVISION.
PROGRAM-ID. Capitulo21.
ENVIRONMENT DIVISION.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 Texto1 PIC X(16) VALUE "7".
PROCEDURE DIVISION.
Condicionales.
IF Texto1 IS ALPHABETIC THEN
DISPLAY "Se ejecuta el IF."
END-IF.
STOP RUN.
END PROGRAM Capitulo21.
No se ejecuta nada en la consola.
No me cansaré de repetirlo, COBOL tiene muchas palabras reservadas. Podemos hasta incluso hacer condiciones que evalúen si el texto está en mayúsculas o en minúsculas.
Con ALPHABETIC-UPPER
, evaluaremos las mayúsculas:
IDENTIFICATION DIVISION.
PROGRAM-ID. Capitulo21.
ENVIRONMENT DIVISION.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 Texto1 PIC A(1) VALUE "Q".
PROCEDURE DIVISION.
Condicionales.
IF Texto1 IS ALPHABETIC-UPPER THEN
DISPLAY "Se ejecuta el IF."
END-IF.
STOP RUN.
END PROGRAM Capitulo21.
Se ejecuta el IF.
Con ALPHABETIC-LOWER
, evaluaremos las minúsculas:
IDENTIFICATION DIVISION.
PROGRAM-ID. Capitulo21.
ENVIRONMENT DIVISION.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 Texto1 PIC A(1) VALUE "q".
PROCEDURE DIVISION.
Condicionales.
IF Texto1 IS ALPHABETIC-LOWER THEN
DISPLAY "Se ejecuta el IF."
END-IF.
STOP RUN.
END PROGRAM Capitulo21.
Se ejecuta el IF.
Todas las evaluaciones que acabas de aprender, las puedes utilizar con el operador de negación NOT
con el fin de expresar todo lo contrario.
IDENTIFICATION DIVISION.
PROGRAM-ID. Capitulo21.
ENVIRONMENT DIVISION.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 Numero1 PIC 99 VALUE 10.
PROCEDURE DIVISION.
Condicionales.
IF Numero1 IS NOT ALPHABETIC THEN
DISPLAY "Se ejecuta el IF."
END-IF.
STOP RUN.
END PROGRAM Capitulo21.
Se ejecuta el IF.
También se puede utilizar el NOT
con los operadores vistos en el capítulo anterior. Por ejemplo:
IDENTIFICATION DIVISION.
PROGRAM-ID. Capitulo21.
PROGRAM-ID. Capitulo21.
ENVIRONMENT DIVISION.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 Numero1 PIC 99 VALUE 10.
PROCEDURE DIVISION.
Condicionales.
IF Numero1 IS NOT > 15 THEN
DISPLAY "Se ejecuta el IF."
END-IF.
STOP RUN.
END PROGRAM Capitulo21.
Puesto que Numero1
no es mayor que 15, se cumple la condición y se ejecuta el condicional.
Se ejecuta el IF.
El uso de clases con CLASS de COBOL
Esto no acaba aquí, COBOL es una locura y nos da la genial posibilidad de declarar nuestros propios tipos de clases en SPECIAL-NAMES
de la ENVIRONMENT DIVISION
.
IDENTIFICATION DIVISION.
PROGRAM-ID. Capitulo21.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
CLASS A-G IS "A" THRU "G".
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 Numero1 PIC 99 VALUE 10.
PROCEDURE DIVISION.
Condicionales.
IF Numero1 IS A-G THEN
DISPLAY "Se ejecuta el IF."
STOP RUN.
END PROGRAM Capitulo21.
La condición da false
y no se ejecuta nada, puesto que el valor 10, no entra en el rango del SPECIAL-NAMES
que he escrito (A-G
).
IDENTIFICATION DIVISION.
PROGRAM-ID. Capitulo21.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
CLASS A-G IS "A" THRU "G".
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 Texto1 PIC A VALUE "C".
PROCEDURE DIVISION.
Condicionales.
IF Texto1 IS A-G THEN
DISPLAY "Se ejecuta el IF."
STOP RUN.
END PROGRAM Capitulo21.
Esta vez si que se ejecuta, ya que el carácter C, entra en el rango que he creado y le he pasado como condición.
Se ejecuta el IF.
Aunque pongamos más de un carácter, mientras todos estén en el rango, va a dar true
.
IDENTIFICATION DIVISION.
PROGRAM-ID. Capitulo21.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
CLASS A-G IS "A" THRU "G".
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 Texto1 PIC AAAA VALUE "ABCD".
PROCEDURE DIVISION.
Condicionales.
IF Texto1 IS A-G THEN
DISPLAY "Se ejecuta el IF."
STOP RUN.
END PROGRAM Capitulo21.
Se ejecuta el IF.
COBOL en cuanto a los strings, si que es case sensitive, por lo que esto, hará que la condición anterior se torne false
, solo por contener caracteres en minúsculas, ya que el rango establecido, es todo en mayúsculas.
IDENTIFICATION DIVISION.
PROGRAM-ID. Capitulo21.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
CLASS A-G IS "A" THRU "G".
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 Texto1 PIC AAAA VALUE "aBCd".
PROCEDURE DIVISION.
Condicionales.
IF Texto1 IS A-G THEN
DISPLAY "Se ejecuta el IF."
STOP RUN.
END PROGRAM Capitulo21.
No se ejecuta nada.
Solo hay que ajustar el rango y contemplar las mayúsculas y minúsculas.
IDENTIFICATION DIVISION.
PROGRAM-ID. Capitulo21.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
CLASS A-G IS "A" THRU "G", "a" THRU "g".
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 Texto1 PIC AAAA VALUE "aBCd".
PROCEDURE DIVISION.
Condicionales.
IF Texto1 IS A-G THEN
DISPLAY "Se ejecuta el IF."
STOP RUN.
END PROGRAM Capitulo21.
Se ejecuta el IF.
Por cierto, estas CLASS
de COBOL, no tienen nada que ver con las clases de la programación orientada a objetos.
Evaluar espacios en blanco con IF en COBOL
Podemos crear CLASS
para todo, por ejemplo, creemos otra para los espacios.
CLASS ESPACIO IS SPACE.
Evaluar valores binarios en COBOL
¿Se te ocurre una CLASS
que contemple valores binarios (0s y 1s)?
Es tan fácil como ponerle un rango del 0 al 1.
IDENTIFICATION DIVISION.
PROGRAM-ID. Capitulo21.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
CLASS BINARIO IS ZERO THRU "1".
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 Texto1 PIC XXXX VALUE "0101".
PROCEDURE DIVISION.
Condicionales.
IF Texto1 IS BINARIO THEN
DISPLAY "Se ejecuta el IF."
STOP RUN.
END PROGRAM Capitulo21.
Se ejecuta el IF.
El valor de ZERO
lo puedes sustituir por "0", es lo mismo.
Evaluar valores octales en COBOL
¿Y una CLASS
para los números octales (0-7)?
Pues un rango del 0 al 7. Así de fácil.
IDENTIFICATION DIVISION.
PROGRAM-ID. Capitulo21.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
CLASS OCTALES IS ZERO THRU "7".
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 Texto1 PIC XXXX VALUE "4573".
PROCEDURE DIVISION.
Condicionales.
IF Texto1 IS OCTALES THEN
DISPLAY "Se ejecuta el IF."
STOP RUN.
END PROGRAM Capitulo21.
Se ejecuta el IF.
Evaluar valores hexadecimales en COBOL
Una CLASS
para los números hexadecimales (0-9 y a-f), es un poco más complicada, pero no mucho.
Se trata solo de hacer un rango de los números y las letras de la a a la f contemplando mayúsculas y minúsculas. Puedes ir añadiendo reglas a una CLASS
, tantas como quieras y separadas por comas.
IDENTIFICATION DIVISION.
PROGRAM-ID. Capitulo21.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
CLASS HEXADECIMALES IS
ZERO THRU "9",
"a" THRU "f",
"A" THRU "F".
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 Texto1 PIC XXXXX VALUE "aF679".
PROCEDURE DIVISION.
Condicionales.
IF Texto1 IS HEXADECIMALES THEN
DISPLAY "Se ejecuta el IF."
STOP RUN.
END PROGRAM Capitulo21.
Se ejecuta el IF.
Puedes hacer tantas clases como necesites y se te ocurran. Solo ponle imaginación.
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.