Pascal - Variantes
Pascal oferece suporte a um tipo único de armazenamento denominado variantes. Você pode atribuir qualquer tipo simples de valores em uma variável variante. O tipo de valor armazenado em uma variante é determinado apenas em tempo de execução. Quase qualquer tipo simples pode ser atribuído a variantes: tipos ordinais, tipos de string, tipos int64.
Tipos estruturados como conjuntos, registros, matrizes, arquivos, objetos e classes não são compatíveis com atribuição de uma variante. Você também pode atribuir um ponteiro a uma variante.
Pascal grátis suporta variantes.
Declaração de uma variante
Você pode declarar o tipo de variante como qualquer outro tipo usando o varpalavra-chave. A sintaxe para declarar um tipo de variante é -
var
v: variant;
Agora, essa variável variante v pode ser atribuída a quase todos os tipos simples, incluindo os tipos enumerados e vice-versa.
type
color = (red, black, white);
var
v : variant;
i : integer;
b : byte;
w : word;
q : int64;
e : extended;
d : double;
en : color;
as : ansistring;
ws : widestring;
begin
v := i;
v := b;
v := w;
v := q;
v := e;
v := en;
v := d:
v := as;
v := ws;
end;
Exemplo
O exemplo a seguir ilustraria o conceito -
Program exVariant;
uses variants;
type
color = (red, black, white);
var
v : variant;
i : integer;
r: real;
c : color;
as : ansistring;
begin
i := 100;
v:= i;
writeln('Variant as Integer: ', v);
r:= 234.345;
v:= r;
writeln('Variant as real: ', v);
c := red;
v := c;
writeln('Variant as Enumerated data: ', v);
as:= ' I am an AnsiString';
v:= as;
writeln('Variant as AnsiString: ', v);
end.
Quando o código acima é compilado e executado, ele produz o seguinte resultado -
Variant as Integer: 100
Variant as real: 234.345
Variant as Enumerated data: 0
Variant as AnsiString: I am an AnsiString