Curso de Cobol y PowerCobol

¿Cuáles son los Tipos de datos primarios?

Capítulo 11: Los tipos de datos primarios

En este capítulo vamos a ver tipos de datos primarios de COBOL, para poder empezar a programar cuanto antes.

Tenemos tres categorías de datos básicas e importantes, las variables, constantes y literales.

Las variables en COBOL

Las variables, como en todo lenguaje de programación, están diseñadas para ser contenedores de datos de diferentes tipos que pueden ir variando de contenido, de ahí su nombre.

Estas variables, vuelvo a repetir, se declaran en la DATA DIVISION, dentro de la WORKING-STORAGE SECTION.

No puedes hacer esto:

⁠⁠       IDENTIFICATION DIVISION.
       PROGRAM-ID. Suma.

       ENVIRONMENT DIVISION.

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

       PROCEDURE DIVISION.
       CalculaSuma.

       MuestraResultado.
           01 Resultado PIC 99 VALUE 0.
       STOP RUN.

       END PROGRAM Suma.
Declaración '01' desconocida.
unknown statement '01'

Fuera de la DATA DIVISION no sabe ni lo que es esta variable. En eso, COBOL varía mucho a lo que tenemos hoy en día en los lenguajes de programación más conocidos.

Las variables tampoco pueden estar dentro de la DATA DIVISION, pero fuera de la WORKING-STORAGE SECTION, dará más de un error.

Tipos de datos en COBOL

Los tipos de datos primitivos en COBOL son muy pocos, alfanuméricos, lo que conocemos como cadenas de caracteres o strings, numéricos y alfabéticos, solo letras.

COBOL no es estrictamente tipado, quiere decir que si declaramos una variable como numérica y le ponemos un string, no va a oponerse a esta aberración:

⁠⁠       IDENTIFICATION DIVISION.
       PROGRAM-ID. Capitulo11.

       ENVIRONMENT DIVISION.

       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
           01 Numero1 PIC 9(29) VALUE "Esto debería ser un número.".
           01 Numero2 PIC 99 VALUE 30.
           01 Resultado PIC 99 VALUE 0.

       PROCEDURE DIVISION.
       Pruebas.
       DISPLAY Numero1.

       STOP RUN.

       END PROGRAM Capitulo11.
Esto debería ser un número.

No le des importancia a los números como este 29, lo iré explicando todo. Aquí quédate con que acabo de declarar una variable que está especificada como numérica, mediante el número 9 en el PIC con una longitud de 29 dígitos que han sido ocupados por caracteres de tipo texto. Aún así, he podido compilar el programa.

Por cierto, por si no sabes que es un string, decirte que son los tipos de dato de texto, cadenas de caracteres. A este tipo de dato, lo llamaré string a partir de aquí.

Por suerte, OpenCobolIDE me advierte que se espera un valor numérico, pero es solo un warning (advertencia). En otros muchos lenguajes de programación como por ejemplo Java, hacer funcionar una variable numérica con un string es imposible. Esto está bien y mal...

Bien, porque el programa no va a dejar de funcionar entero por un simple error de tipo de dato. Sin embargo, hace que sea más fácil cometer errores.

Hagamos una pequeña demostración de un fallo que impedirá la compilación aunque COBOL lo permita de primeras.

Tenemos tres variables numéricas, las cuales tienen un valor de 10, 30 y la tercera, para el resultado, por defecto la tengo a 0.

Con COMPUTE puedo sumar las dos primeras variables y almacenarlas en la tercera (Resultado).

⁠⁠       IDENTIFICATION DIVISION.
       PROGRAM-ID. Capitulo11.

       ENVIRONMENT DIVISION.

       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
           01 Numero1 PIC 9(29) VALUE 10.
           01 Numero2 PIC 99 VALUE 30.
           01 Resultado PIC 99 VALUE 0.

       PROCEDURE DIVISION.
       CalculaYMuestraResultado.
           COMPUTE Resultado = Numero1 + Numero2.
           DISPLAY Resultado.

       STOP RUN.

       END PROGRAM Capitulo11.
40

El programa compila y de momento no hay nada incorrecto. Sin embargo, ¿qué pasa si ahora pongo mal de nuevo el tipo de dato de una de las variables? va a seguir compilando igual o habré roto la ejecución del programa?

01 Numero1 PIC 9(29) VALUE "No es un número".
'Numero1' no es numérica: 'valor de la variable'.
'Numero1' not numeric: 'No es un n\303\272mero             '

Los datos literales y las constantes en COBOL

El siguiente tipo, los literales son datos sin más. Datos sin un nombre como tienen las variables. No podemos reasignarles un nuevo valor. Son constantes.

Tenemos dos tipos de literales, numéricos y alfanuméricos.

¿Dónde utilizamos estos literales?

Los utilizaremos, por ejemplo en un DISPLAY. Lo puedo especificar, pero no está asignado a ningún nombre de variable, por lo que no puedo llamarlo ni redeclararlo. En definitiva, es una constante sin nombre.

En el siguiente ejemplo, tienes un literal numérico en un DISPLAY.

⁠⁠       IDENTIFICATION DIVISION.
       PROGRAM-ID. Capitulo11.

       ENVIRONMENT DIVISION.

       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
       PROCEDURE DIVISION.
       MuestraLiterales.
           DISPLAY 50.

       STOP RUN.

       END PROGRAM Capitulo11.
50

Con los strings lo mismo:

⁠⁠       IDENTIFICATION DIVISION.
       PROGRAM-ID. Capitulo11.

       ENVIRONMENT DIVISION.

       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
       PROCEDURE DIVISION.
       MuestraLiterales.
           DISPLAY "Esto es un literal de texto.".

       STOP RUN.

       END PROGRAM Capitulo11.
Esto es un literal de texto.

En definitiva, aquí se entremezclan los dos tipos primarios que te he dicho, los literales y las constantes, ya que en COBOL no existían las constantes definidas por el programador, solo las del propio lenguaje.

En la mayoría de lenguajes de programación podemos crear una constante, darle nombre y utilizarla mediante su nombre. En COBOL no se podía, hasta que por suerte, a partir de la revisión ISO 2002 de COBOL se agregó la palabra CONSTANT para especificar constantes con nombre.

⁠⁠       IDENTIFICATION DIVISION.
       PROGRAM-ID. Capitulo11.

       ENVIRONMENT DIVISION.

       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
           01 CIEN-CONSTANTE CONSTANT AS 100.
       PROCEDURE DIVISION.
       MuestraLiterales.
           DISPLAY CIEN-CONSTANTE.

       STOP RUN.

       END PROGRAM Capitulo11.
100

Hay que decir, que hay un problema con utilizar CONSTANT. Si trabajas con revisiones anteriores del lenguaje tendrás problemas para trabajar con tus archivos de COBOL y los ya creados de versiones anteriores de un supuesto programa antiguo.

Con el código anterior con la constante, vamos a las preferencias de OpenCobolIDE, a la pestaña que aún no había explicado llamada "Compiler" (compilador). Es aquí donde podemos configurar el compilador del programa.

Ves a la sección "Standard" (estándar) y selecciona una opción de estándar anterior a la de 2002, por ejemplo, cobol85.

Estándar del compilador de COBOL

Ahora, verás que la constante da error. Este estándar no reconoce esta instrucción.

Pues ya lo sabes, de esta forma puedes probar y jugar con diferentes estándares de COBOL. Vuelve a dejar el valor "default" (por defecto) hasta nuevo aviso.

Si vas a hacer de cero un programa y sabes que no vas a requerir de archivos anteriores al estándar 2002, puedes utilizar CONSTANT sin miedo alguno.

Las constantes figurativas de COBOL

Las constantes figurativas, que están presentes en revisiones antiguas, son constantes predefinidas del lenguaje que pueden darle un valor por defecto a una variable. Las iremos viendo a lo largo del curso, pero por el momento, mira este ejemplo con una de estas constantes para que no te suene tan abstracto.

⁠⁠       IDENTIFICATION DIVISION.
       PROGRAM-ID. Capitulo11.

       ENVIRONMENT DIVISION.

       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
           01 NUMERO0 PIC 9 VALUE ZERO.
       PROCEDURE DIVISION.
       MuestraLiterales.
           DISPLAY NUMERO0.
       STOP RUN.

       END PROGRAM Capitulo11.

ZERO lleva el valor numérico 0, es una constante que ya trae consigo COBOL que podemos utilizar cuando queramos darle inicialmente un valor de cero a una variable, por ejemplo.

0

Por cierto, las constantes, se suelen escribir en casi todos los lenguajes en mayúsculas para destacarlas sobre las variables, por eso NUMERO0 en el código en lugar de Numero0.

En el siguiente capítulo empezamos a ver las variables con más detalle.


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.