
¿Cómo funciona el condicional EVALUATE TRUE?
Capítulo 27: El condicional EVALUATE TRUE
Veamos más cosas sobre EVALUATE
. En concreto, veremos otra forma de darle uso diferente a la del capítulo 26. Se trata del conjunto EVALUATE TRUE
El condicional EVALUATE TRUE
Gracias a EVALUATE TRUE
podemos utilizar las variables de nivel 88 como posibles valores.
Aquí tienes un claro ejemplo de uso. Se trata de crear una serie de posibilidades con un nivel 88 y en el EVALUATE
, en lugar de ponerle de expresión a evaluar el nombre de la variable de nivel 88, le ponemos sencillamente TRUE
. En los bloques WHEN
, colocaremos cada una de las posibilidades 88 (en este ejemplo, Joven, Maduro y Anciano).
IDENTIFICATION DIVISION.
PROGRAM-ID. Capitulo27.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 Edad PIC 999 VALUE ZEROS.
88 Joven VALUE 1 THRU 39.
88 Maduro VALUE 40 THRU 65.
88 Anciano VALUE 66 THRU 100.
PROCEDURE DIVISION.
CompruebaEdad.
*> Se le solicita la edad al usuario.
DISPLAY "Introduce tu edad: "
ACCEPT EDAD.
*> Se evalúan posibles valores.
EVALUATE TRUE
WHEN Joven
DISPLAY "Eres joven. " WITH NO ADVANCING
WHEN Maduro
DISPLAY "Eres maduro. " WITH NO ADVANCING
WHEN Anciano
DISPLAY "Eres anciano. " WITH NO ADVANCING
WHEN OTHER
DISPLAY "Edad incorrecta. " WITH NO ADVANCING
END-EVALUATE.
STOP RUN.
END PROGRAM Capitulo27.
Trabajar con EVALUATE y varias variables
Una de las posibilidades que no contemplé en el capítulo anterior, era el uso de EVALUATE
con más de una variable. Puedes hacer bloques WHEN
con tantas variables como quieras.
Aquí, se evalúa que si NUM1
es igual a 16, que se ejecute el bloque de código del primer WHEN
. Si NUM2
es igual a 10, se ejecuta el segundo bloque. Si NUM3
es igual o menor a 15, se ejecuta el bloque 3. En caso de que nada se cumpla, el bloque WHEN OTHER
. Aquí, se cumplen los tres bloques, pero, se ejecuta solo el primero que devuelve TRUE
, en este caso el bloque 1. Si no se cumpliera ese, se ejecutaría el 2.
IDENTIFICATION DIVISION.
PROGRAM-ID. Capitulo27.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
77 NUM1 PIC 9(5) VALUE 16.
77 NUM2 PIC 9(5) VALUE 10.
77 NUM3 PIC 9(5) VALUE 20.
PROCEDURE DIVISION.
EvaluarValores.
*> Se evalúan posibles valores.
EVALUATE TRUE
WHEN NUM1 = 16
DISPLAY "Bloque 1."
WHEN NUM2 = 10
DISPLAY "Bloque 2."
WHEN NUM3 >= 15
DISPLAY "Bloque 3."
WHEN OTHER
DISPLAY "Valor no contemplado."
END-EVALUATE.
STOP RUN.
END PROGRAM Capitulo27.
EVALUATE con variables de Nivel 88 y 77 o 01
La cosa se puede volver más compleja, ya que puedes utilizar a la vez el nivel 88 y 77 o 01 para hacer evaluaciones más complejas con EVALUATE
.
En el siguiente ejemplo, estoy evaluando en el primer bloque, si la variable Num1
es igual a 1 y además, si el valor que se introduce en la consola esta en el Rango1
. Lo mismo hago con el resto de rangos. Este ejemplo, no es útil para nada más que para ver como es la sintaxis a la hora de escribir bloques WHEN
con diferentes niveles de ejecución de variables.
IDENTIFICATION DIVISION.
PROGRAM-ID. Capitulo27.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
*> Nivel 88
01 Rangos PIC 999 VALUE ZEROS.
88 Rango1 VALUE 1 THRU 10.
88 Rango2 VALUE 11 THRU 20.
88 Rango3 VALUE 21 THRU 30.
*> Nivel 77
77 Num1 PIC 9 VALUE 1.
77 Num2 PIC 9 VALUE 2.
77 Num3 PIC 9 VALUE 3.
PROCEDURE DIVISION.
*> Se solicita un valor
DISPLAY "Introduce un número: "
ACCEPT Rangos.
EvaluarValores.
*> Se evalúan posibles valores.
EVALUATE TRUE
WHEN Num1 = 1 AND Rango1
DISPLAY "Bloque 1."
WHEN Num2 = 2 AND Rango2
DISPLAY "Bloque 2."
WHEN Num3 = 3 AND Rango3
DISPLAY "Bloque 3."
WHEN OTHER
DISPLAY "Valor no contemplado."
END-EVALUATE.
STOP RUN.
END PROGRAM Capitulo27.
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.