Aula 19: Definir novos tipos |
Type typename = description; |
com typename o nome que queremos dar ao novo tipo e decription a descrição do novo tipo que pode incluir qualquer combinação (arrays e records) de tipos de variáveis ou tipos simples. Pode também ser um tipo apontador que nós vamos aprender na aula seguinta (aula 20).
Exemplos:
Type float = real;
Isto é util para programadores que prefirem
(ou costumam) programar na linguagem C. Depois este declaração,
será possível a utilização das variáveis
do tipo float, como em C.
Mais exemplos:
Type realarray = array[1..10] of real;
Type myrecord =
record
name: string;
length: real;
width: real;
height: real;
end;
Nota que definir um novo tipo não vai criar uma
nova variável! Não vai reservar espaço na memória
e não atribue um valor a uma variável. Só vai especificar
ao compilador um novo tipo da variável que nós podemos usar
mais tarde numa declaração de uma nova variável.
Var varname: typename; |
com varname o nome da nova variável, e typename o tipo. Este declaração é exactamente igual à declaração das variáveis normais da aula 5. Só que agora podemos usar os nossos novos tipos.
Exemplos:
Var f: float;
Isto (agora) é muito parecido com a linguagem
C (em C seria "float f")
Var ra: realarray;
vai declarar uma variável do tipo realarray.
E no código podemos usar este novo array, por exemplo
ra[1] := 2.68;
Isto é equivalente com
Var ra: array[1..10] of real;
ra[1] := 2.68;
O útlimo exemplo
Type myrecord =
record
name: string;
length: real;
width: real;
height: real;
end;
Var mydata: array[1..100] of myrecord;
mydata[23].length := 3.1;
Type ra = array[1..6]
of integer;
Var x: ra;
y: array[1..7]
of integer;
FUNCTION AreEqual(r: ra): boolean;
(* Nota que o novo tipo pode também
ser usado para os parametros *)
begin
if r[1]=r[2] then
AreEqual := TRUE;
else
AreEqual := FALSE;
end;
begin
x[1] := 1;
x[2] := 0;
WriteLn(AreEqual(x));
y[1] := 1;
y[2] := 0;
(* A seguinta linha de código
não é permitido, porque o tipo de y e o tipo que a função
'AreEqual' está a esperar são diferente. Nota a diference
no tamanho dos arrays. *)
WriteLn(AreEqual(y));
end.
Type time =
record
hour, minute, second:
integer;
end;
PROCEDURE ShowTime(t: time);
(* Vai mostrar o tempo no formato
h:m.s *)
begin
WriteLn(t.hour, ':', t.minute, '.',
t.second);
end;
Var atime: time;
begin
atime.hour := 23;
atime.minute := 16;
atime.second := 9;
ShowTime(atime);
end.
Type date =
record
day, month, year: integer;
end;
Type time =
record
hour, minute, second:
integer;
end;
Type dateandtime =
record
dattime: time;
datdate: date;
end;
Var x: datendtime;
x.dattime.hour := 1;
x é
um record que contem dois campos. Um campo chama-se dattime
o que é um record de três campos. Um destes campos é
hour.