Alters

COBOL: flujo

Hola de nuevo!

Como veis, he actualizado el diseño del blog, ahora es algo más actual...

Siguiendo con el mini - curso de COBOL, en la entrada de hoy toca ver el flujo: es decir, sentencias que cambian el rumbo normal del un programa. 

- Flujo en COBOL
   * IF
   * PERFORM
   * GO TO
   * Salir y continuar


IF

Un IF en COBOL es como cualquier otro if, es decir 

IF condicion
  sentencias
ELSE IF condicion
  sentencias
ELSE
  sentencias


Los operadores lógicos son escritos (es decir, NOT, AND, OR...). Los operadores aritméticos son los típicos (<, >, = - solo un "="). Este tema lo miramos después.

Un ejemplo de if:

IF opcion = 'A'
  DISPLAY 'HOLA'
END-IF.

Hay una cosa a tener en cuenta: dentro de un bloque (un bloque es un conjunto de sentencias que va entre un token de apertura y uno de cierre - END -) no hay ningún punto. También fijaros que los IF acaban en END-IF. Si son de una línea se puede abrevias con IF con THEN sen., pero yo soy más de poner siempre el END-IF (evita confusiones).


PERFORM

Un PERFORM es una "llamada a función", pero recordad que va entre comillas porque realmente llamamos a un párrafo.

PERFORM también permite crear bloques, ya que, en realidad, PERFORM es un token polimórfico. Sirve para:

 - Llamar párrafos
 - Llamar conjunto de párrafos
 - Llamar a bloques
 - Llamar a sección
 - Repetir párrafo / conjunto / bloque X veces (for)
 - Repetir hasta condición (do/while, do/until).

Podemos hacer

PERFORM 5 TIMES
  DISPLAY 'HOLA'
END-PERFORM.

Así como:

PERFORM SALUDO 5 TIMES.

SALUDO.
  DISPLAY 'HOLA'.


Hemos visto que con "X TIMES" hace un for. Para hacer un "while/until", la cosa es algo más complicada. La sintaxis básica es:

PERFORM parrafo/seccion VARYING variable FROM inicio BY paso UNTIL condicion.

Para llamar a una serie de párrafos, añadimos la cláusula THRU. Esto hará que ejecute desde el primer al último párrafo indicado, por ejemplo:

PERFORM uno THRU cinco. , en el ejemplo que sigue, ejecutaría todo el código.

uno.
 DISPLAY 'uno'.

dos.
  DISPLAY 'dos'.

tres.
  DISPLAY 'tres'.

cuatro.
  DISPLAY 'cuatro'.

cinco.
  DISPLAY 'cinco'.

Condicionales:

Se me había olvidado poner en el índice cómo usar las condiciones, así que las explico antes del GO TO:

Condiciones hay básicamente de dos tipos: aritmética y lógica.

 - Lógica: Se usan unas tablas para verificar la veracidad de la sentencia. Son usados AND, OR, NOT... en este tipo de sentencias.

 - Aritmética: Se calculan valores y comparan entre ellos, para decidir el resultado. Son usados símbolos aritméticos (=, <, >...) para comparar, así como operaciones aritméticas.

Un inciso: las operaciones aritméticas en COBOL son algo diferentes. Normalmente podemos hacer algo así como

COMPUTE var1 = expr.

Siendo expr una operación matemática, por ejemplo: "var1 - 5". En este tipo de sentencias se usan los signos típicos: *, /. +, -.

Se pueden hacer cálculos de otros tipos, como ADD, SUBSTRACT, MULTIPLY y DIVIDE.

En estas sentencias se sigue el siguiente formato:

ADD val TO var -> es como "var+=val"
ADD val TO var GIVING var2 -> es como "var2 = val+var"
SUBSTRACT val TO var (GIVING var2)
MULTIPLY val TO var (GIVING var2)
DIVIDE val TO var (GIVING var2) (REMAINDER var3) -> el resto va a var3

Adicionalmente, se pueden añadir las cláusulas ROUNDED y ON SIZE ERROR.

ROUNDED: va antes de "val", sirve para obtener un valor redondeado. Si no se pone ROUNDED y la precisión de nuestra variable es menor, se trunca.

ON SIZE ERROR: si no redondeamos, podemos poner esta cláusula al final de la sentencia, y esto añade un "handler" a la operación, por ejemplo

ADD 1 TO var ON SIZE ERROR MOVE 0 TO var2.

IF var2 = 0
  ...


Por ahora esto es lo básico de operaciones aritméticas.

GO TO


Sin duda, ésta es la sentencia más odiada por todos, y realmente no se porqué.
GO TO hace un salto incondicional hacia un párrafo. Es útil cuando tenemos que ir a un párrafo desde más de un sitio a la vez, independientemente del contexto en el que estemos.

Es cierto que el uso excesivo del GO TO puede confundir, pero si sabéis lo que hacéis no hay problemas.

Su uso es: GO TO parrafo.

Salir y continuar

Hay dos sentencias, similares a "continue" y "exit/break" que se pueden usar en bloques. Los equivalentes en COBOL son CONTINUE y NEXT SENTENCE.

CONTINUE hace que ejecute un "salto", es el típico continue
NEXT SENTENCE lleva la ejecución a la próxima sentencia (es decir, después del siguiente ".").


Como colofón, añadir que estas sentencias pueden ir anidadas, sin olvidar que sólo el último cierre de bloque ha de tener el punto.

Como os digo siempre, acepto sugerencias en los comentarios.

Saludos y hasta la próxima