Buenas prácticas de COBOL - Curso de COBOL y PowerCOBOL - Capítulo 10

En este capítulo, verás unas cuantas normas para una correcta escritura y los comentarios, para qué son y como utilizarlos.

El programa más pequeño de COBOL

Empecemos viendo el programa más pequeño que puedes crear en COBOL (no funcionará en todos los estándares).

Código COBOL

       IDENTIFICATION DIVISION.
       PROGRAM-ID. CAPITULO-10.

Dos líneas para no hacer nada, todo hay que decirlo. Solo tenemos un programa creado que tiene nombre. Nada más. No obstante, compila.

terminal Resultado en la consola terminal

Process finished with exit code 0

Este sería el programa más corto posible que haga algo.

Código COBOL

       IDENTIFICATION DIVISION.
       PROGRAM-ID. CAPITULO-10.
       PROCEDURE DIVISION.
           DISPLAY "Este programa solo imprime este mensaje.".

terminal Resultado en la consola terminal

Este programa solo imprime este mensaje.

Aunque para hacerlo más correcto, habría que especificar un párrafo:

Código COBOL

       IDENTIFICATION DIVISION.
       PROGRAM-ID. CAPITULO-10.
       PROCEDURE DIVISION.
       MUESTRA-DISPLAY.
           DISPLAY "Este programa solo imprime este mensaje.".

Tras estas pequeñas curiosidades, pasemos a temas más importantes. La convención de escritura y nomenclatura de variables.

¿Escritura en mayúsculas o en minúsculas?

Hace ya unos capítulos, te dije que COBOL era case insensitive (no distingue mayúsculas y minúsculas). Esto quiere decir, que al compilador no le importa en absoluto si está el código en mayúsculas o en minúsculas. A quien si le importa, es a los ojos de quien programa.

Aquí hay una división de ideas. Hay quienes prefieren escribir absolutamente todo en mayúsculas (como he hecho hasta ahora), hasta el punto si se pudiera.

No obstante, a partir de aquí, vamos a empezar a cambiar eso. Tú escribe en este sentido como prefieras, no hay una forma correcta entre todo en mayúsculas o la que voy a utilizar a partir de ahora.

¿Por qué cambio ahora? Primero quería que te acostumbraras a ver algo de código de una forma y ahora que ya te estás acomodando, te cambio para que puedas ver desde otro punto de vista la diferencia. Si te lo explicaba esto en el primer capítulo, seguramente se te olvidaría en algún momento y seguirías mi forma de escribir, ahora puedes elegir.

Escritura todo en mayúsculas

Esto es como estoy escribiendo hasta ahora:

Código COBOL

⁠       IDENTIFICATION DIVISION.
       PROGRAM-ID. CAPITULO-10.

       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       SPECIAL-NAMES.
       DECIMAL-POINT IS COMMA.

       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
           01 NUMERO1 PIC 999 VALUE 15.
           01 NUMERO2 PIC 999 VALUE 50.
           01 TEXTOSALUDO PIC XXXX VALUE "Hola".

       PROCEDURE DIVISION.
       MUESTRA-DATOS.
           DISPLAY NUMERO1.
           DISPLAY NUMERO2.
           DISPLAY TEXTOSALUDO.
       STOP RUN.
       END PROGRAM CAPITULO-10.

Escritura combinada entre mayúsculas y minúsculas

Esta forma de escritura es dejando todas las palabras del lenguaje COBOL en mayúsculas y el contenido propio como nombres de variables, en PascalCase, que es el estilo de escribir con la primera letra de cada palabra en mayúscula y sin guiones.

Código COBOL

⁠       IDENTIFICATION DIVISION.
       PROGRAM-ID. Capitulo10.

       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       SPECIAL-NAMES.
       DECIMAL-POINT IS COMMA.

       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
           01 Numero1 PIC 999 VALUE 15.
           01 Numero2 PIC 999 VALUE 50.
           01 TextoSaludo PIC XXXX VALUE "Hola".

       PROCEDURE DIVISION.
       MuestraDatos.
           DISPLAY Numero1.
           DISPLAY Numero2.
           DISPLAY TextoSaludo.
       STOP RUN.
       END PROGRAM Capitulo10.

Bien, escoge la forma que prefieras. Aclarado esto, sigamos con las normas de nombres para las variables.

Normas de nombres de variables en COBOL

Los nombres deberán contener al menos un carácter alfabético de la a "A" la "Z", numérico del "0" al "9" y que no comiencen ni terminen con un guion. Por ejemplo estos:

Código COBOL

01 Numero PIC 99 VALUE 10.
01 Número PIC 99 VALUE 15.
01 20Numero PIC 99 VALUE 20.

Pese a que funciona con acentos, es mejor que por temas de compatibilidad con diferentes codificaciones a UTF-8, que no utilices acentos en los nombres.

Y esto es incorrecto en cualquiera de los tres casos:

Código COBOL

01 -Numero PIC 99 VALUE 10.
01 Número- PIC 99 VALUE 15.
01 -20Numero- PIC 99 VALUE 20.

Por supuesto puedes incluir guiones después del primer caracter y antes del último:

Código COBOL

01 Variable-con-guiones PIC 99 VALUE 15.

Los nombres deben tener un mínimo de 1 caracter y un máximo de 31.

Nombre de variable lo más corta posible:

Código COBOL

01 A PIC 99 VALUE 10.

Esta variable tiene 25 caracteres y aun la admite, no obstante es muy larga, intenta no hacerlas tan largas.

Código COBOL

01 EstaEsUnaVariableMuyLarga PIC 99 VALUE 15.

Si pasamos los 31 caracteres nos da el error...

Código COBOL

01 EstaEsUnaVariableMuyLargaaaaaaaa PIC 99 VALUE 15.

terminal Resultado en la consola terminal

La longitud de la palabra excede los 31 caracteres.

word length exceeds 31 characters: 'EstaEsUnaVariableMuyLargaaaaaaaa'

Si dejamos el nombre vacío, no da error, pero no tiene sentido, ya que no podemos llamar a la variable.

No sé si lo habrás pensado, pero al ser COBOL insensible a mayúsculas y minúsculas, da igual que cambiemos en las llamadas a las variables.

Código COBOL

01 Numero1 PIC 999 VALUE 15.
DISPLAY NUmeRo1.

Sin embargo, por temas de pulcritud y para evitar confusión, a mi personalmente, me gusta respetar las mayúsculas y las minúsculas.

Supongo que ahora entenderás mejor porqué OpenCobolIDE tiene la opción del intellisense en mayúsculas o en minúsculas (el sistema de recomendaciones de palabras al escribir). Tienes esta opción en Preferencias del programa, revisa el capítulo 3 si no sabes donde.

Intellisense en mayúsculas:

intellisense mayúsculas opencobolide

Intellisense en minúsculas:

intellisense minúsculas opencobolide

Críticas a COBOL

Una de las críticas a COBOL que se han dado, es la gran cantidad de palabras reservadas que tiene. Personalmente, no lo veo mal.

La crítica no es en sí a la cantidad de palabras, si no a las palabras que utiliza. Por ejemplo, NUMBER es una palabra reservada. Es una palabra típica que se podría utilizar para un nombre de variable, sobretodo si nuestro lenguaje materno es el inglés.

Como te he dicho, tampoco es para tanto, al menos con un IDE que nos avise y nos diga las palabras clave. En las hojas de codificación y para programadores de habla anglosajona ya era otro asunto, debido a la gran cercanía de COBOL al inglés.

Solo decirte, que como en cualquier otro lenguaje de programación, no puedes utilizar palabras reservadas para crear nombres.

Sigamos con las buenas prácticas. No puedo obviar el decirte que los nombres de las variable, secciones y demás nombres que vayas creando deberán ser lo más descriptivos posibles con su cometido. Esto es así en COBOL y en cualquier otro lenguaje de programación.

Aquí tienes un ejemplo de un mal uso de los nombres en variables:

Código COBOL

01 Variable1 PIC 99 VALUE 15.
01 Variable2 PIC 99 VALUE 30.
01 Variable3 PIC 99 VALUE 0.

Hay tres variables, que por su nombre no sabemos para qué sirven.

Aquí puedes mirar a simple vista el valor que tiene cada una de ellas y saber para que la vas a utilizar, ya que no hay muchas y aún estamos trabajando con programas de pocas líneas.

Sin embargo, los programas COBOL acostumbran a tener muchas líneas de código, a medida que vayas escribiendo y tengas 500 variables y 3000 líneas de código, probablemente pierdas un montón de tiempo subiendo y bajando para ver que tiene cada variable almacenado y ni que decir cuando se trabaje con más de un archivo.

Los nombres de las secciones como MAIN-PROCEDURE (ha aparecido en varios ejemplos) que es la que se crea por defecto en OpenCobolIDE, no son una excepción. Ahora mismo la uso, porque estamos practicando lo más básico, pero no es muy descriptiva.

El nombre del programa también debe ser descriptivo y acorde a su función.

Veamos un ejemplo de lo que sería correcto en este caso.

Código COBOL

⁠       IDENTIFICATION DIVISION.
       PROGRAM-ID. CalculadoraSumas.

       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       SPECIAL-NAMES.
       DECIMAL-POINT IS COMMA.

       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
           01 Numero1 PIC 99 VALUE 15.
           01 Numero2 PIC 99 VALUE 30.
           01 Resultado PIC 99 VALUE 0.

       PROCEDURE DIVISION.
       CalculaSuma.

       MuestraResultado.
       STOP RUN.
       END PROGRAM CalculadoraSumas.

Aún no realiza nada este programa, pero en la sección CalculaSuma, escribiría las líneas necesarias para calcular una suma a partir de Numero1 + Numero2, que se almacenara en la variable Resultado y en la sección MuestraResultado, que imprimiese el valor de la variable Resultado.

No te asustes, aún no hemos llegado hasta ese punto de realizar todo esto, pero llegaremos pronto.

Si vienes de programar en otros lenguajes, ya debes saber esto de sobra, pero nunca está demás recordarlo, ya que en algún momento, todos hemos puesto un nombre poco descriptivo y así como te lo cuento, soy incluso capaz de hacerlo durante el curso, que no te extrañe.

Comentarios en COBOL

También es muy importante que vayas poniendo comentarios cuando haga falta.

Código COBOL

⁠       IDENTIFICATION DIVISION.
       PROGRAM-ID. CalculadoraSumas.

       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       SPECIAL-NAMES.
       DECIMAL-POINT IS COMMA.

       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
           01 Numero1 PIC 99 VALUE 15.
           01 Numero2 PIC 99 VALUE 30.
           01 Resultado PIC 99 VALUE 0.

       PROCEDURE DIVISION.
      *> Este párrafo calcula la suma.
       CalculaSuma.

      *> Este párrafo imprime el resultado obtenido de la suma.
       MuestraResultado.
       STOP RUN.
       END PROGRAM CalculadoraSumas.

En este caso, los comentarios sobran tanto que parecen un insulto al propio programa, hay muy pocas líneas y no se necesitan comentarios para saber lo que hace cada cosa, pero con esto ya sabes lo que tienes que ir haciendo a medida que el programa se vuelva más grande y complejo.

Recuerda que los comentarios se indican en la columna 7 con un asterisco.

Los puedes poner solo con el asterisco * o también con el símbolo mayor que *>. La segunda forma era la obligatoria en estándares más antiguos. Si quieres que tu programa sea compatible con todos, utiliza la segunda forma.

Ves a las preferencias de OpenCobolIDE y deja la forma que prefieras.

Comentarios COBOL

Recuerda que para utilizar los comentarios, lo puedes escribir a mano o utilizar el atajo CTRL+/ con una línea o varias.

¿Para qué sirven los comentarios?

Los comentarios son necesarios para dos cosas principales. La primera , es dar una pequeña descripción de lo que hace cada parte del programa, con el fin de que cuando revisemos el programa nosotros u otras personas, que sea todo rápido de ver y entender a simple vista.
El segundo propósito de los comentarios es el de anular ciertas línea de código, con el fin de probar como funcionan ciertos programas sin algunas secciones de código o para no eliminar esas líneas por si las necesitamos más adelante.

Los comentarios son para las personas. Al compilador le dan exactamente igual, los ignora por completo.

En OpenCobolIDE, los comentarios se distinguen además de por el símbolo, en que se pone toda la línea de color gris.

En los lenguajes de programación suele haber dos tipos de comentarios, los de una línea o los multilínea, en COBOL, solo hay los primeros. Si queremos anular varias líneas juntas, lo haremos con tantos comentarios como líneas tengamos.

Anulación de una línea de código en COBOL:

Código COBOL

⁠       IDENTIFICATION DIVISION.
       PROGRAM-ID. Capitulo10.

       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       SPECIAL-NAMES.
       DECIMAL-POINT IS COMMA.

       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
      *>   01 Numero1 PIC 99 VALUE 15.
           01 Numero2 PIC 99 VALUE 30.
           01 Resultado PIC 99 VALUE 0.

       PROCEDURE DIVISION.
       STOP RUN.
       END PROGRAM Capitulo10.

Anulación de varias líneas de código en COBOL:

Código COBOL

⁠       IDENTIFICATION DIVISION.
       PROGRAM-ID. Capitulo10.

       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       SPECIAL-NAMES.
       DECIMAL-POINT IS COMMA.

       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
      *>   01 Numero1 PIC 99 VALUE 15.
      *>   01 Numero2 PIC 99 VALUE 30.
      *>   01 Resultado PIC 99 VALUE 0.

       PROCEDURE DIVISION.
       STOP RUN.
       END PROGRAM Capitulo10.

Indentación en COBOL

Por último, muy importante también el tema de la indentación, sobre la que ya hablé un poco en capítulos anteriores.

Un ejemplo muy bueno de indentación en la programación es Python. Python es flexible en muchas cosas, pero estricto con la indentación. Si un programa no está escrito con todas las indentaciones como toca, no se ejecuta.

Por supuesto, en COBOL esto no ocurre, pero sí que es una buena idea que te lo tomes como si ocurriera.

No hace falta que ponga más ejemplos, lo iremos viendo a medida que vaya escribiendo en cualquiera de los próximos capítulos.