5.2. Definición de tipos.
El "tipo" de una variable es lo que determina qué clase de valores podremos guardar en ella. En los programas que hemos creado hasta ahora, el "tipo" es lo que indicamos junto al nombre de una variable cuando la declaramos. Por ejemplo,
var PrimerNumero: real;
indica que vamos a usar una variable que se va a llamar PrimerNumero y que almacenará números reales (con decimales), mientras que
const intentos: integer = 3;
indica que vamos a usar una variable llamada intentos, que guardará números enteros y que tendrá como valor inicial 3.
También podemos crear nuestros tipos de datos, a partir de los tipos básicos que permite el lenguaje, usando la palabra "type". Así, por ejemplo, podemos crear una nueva versión del ejemplo de "array de records" del apartado 4.3.3, definiendo
(* ARR_REC2.PAS, "array" de varios "record" *) (* Segunda version, con "const" y "type" *) (* Parte de CUPAS5, por Nacho Cabanes *) program RecordArray2; const maxDatos = 10; type ficha = record nombre: string[30]; edad: byte; end; var datos: array [1..maxDatos] of ficha; begin datos[1].nombre := 'Ignacio'; datos[1].edad := 23; write('El primer nombre es ', datos[1].nombre ); write(' y la primera edad ', datos[1].edad); end. (* Resultado: El primer nombre es Ignacio y la primera edad 23 *)
Esto añade legibilidad, pero no es imprescindible. Entonces... ¿no será necesario definir tipos? Sí, en algunas circunstancias concretas sí será necesario. Un primer ejemplo en cuando tenemos dos variables declaradas de igual forma en distintas partes del programa, como en este ejemplo:
(* TIPOS1.PAS, asignacion INCORRECTA de tipos *) (* No compila !!! *) (* Parte de CUPAS5, por Nacho Cabanes *) program Tipos1; var ficha1: record nombre: string; email: string; anyoNacimiento: integer; end; ficha2: record nombre: string; email: string; anyoNacimiento: integer; end; begin ficha1.nombre := 'Pepe'; ficha1.email := 'p@p.com'; ficha1.anyoNacimiento := 1990; ficha2 := ficha1; writeLn( ficha2.nombre ); end.
Aunque a nuestros ojos parezca que ambas variables son del mismo tipo, para el compilador no es así, de modo que el programa anterior no compilar correctamente.
Podríamos declarar ambas a la vez, de la siguiente forma:
var ficha1, ficha2: record nombre: string; email: string; anyoNacimiento: integer; end;
pero eso no servirá si las variables están en zonas separadas del programa (algo que nos empezará a ocurrir pronto). En ese caso, no habrá más remedio que crear un nuevo tipo de datos, y declarar ambas variables como pertenecientes a dicho tipo:
(* TIPOS2.PAS, asignacion correcta de tipos *) (* Parte de CUPAS5, por Nacho Cabanes *) program Tipos2; type TipoFicha = record nombre: string; email: string; anyoNacimiento: integer; end; var ficha1: TipoFicha; ficha2: TipoFicha; begin ficha1.nombre := 'Pepe'; ficha1.email := 'p@p.com'; ficha1.anyoNacimiento := 1990; ficha2 := ficha1; writeLn( ficha2.nombre ); end.
Y habrá más casos en los que sea imprescindible declarar tipos, como cuando vayamos a volcar nuestros "record" a fichero, pero eso lo veremos más adelante.
No hay comentarios:
Publicar un comentario