Curso de Cobol y PowerCobol

¿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.

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.