Variant/pl
│
Deutsch (de) │
English (en) │
español (es) │
français (fr) │
polski (pl) │
Powrót do typów danych.
Typ danych Variant umożliwia jednej zmiennej przechowywanie wartości wielu różnych typów. Pozwala to statycznie typowanemu językowi programowania, takiemu jak Free Pascal, na pewną elastyczność, którą zwykle można znaleźć tylko w dynamicznie typowanym języku, np. takim jak Python.
Typ danych Variant zajmuje więcej pamięci niż proste typy danych. Wymagania dotyczące pamięci typu wariantu dla 32-bitowej kompilacji to 16 bajtów lub 128 bitów. Wymagania dotyczące pamięci dla wariantu typu w kompilacji 64-bitowej to 24 bajty lub 192 bity. Wartości dowolnego prostego typu danych mogą być przechowywane w zmiennej wariantowej. Jednak operacje z typem danych Variant są znacznie wolniejsze niż w przypadku zmiennej typowanej statycznie typem prostym.
W module Variants istnieją dwie przydatne funkcje do pracy z typami Variant:
- Funkcja VarType() sprawdza, jaki typ danych zawiera wariant.
- Funkcja VarToStr() konwertuje wartość zmiennej typu Variant na reprezentację ciągu string.
Definicja pola danych typu Variant. Zaleca się używanie modułu Variants:
Uses
Variants;
var
v: Variant;
Przykładowe użycie:
uses
Variants;
var
v: Variant;
s: string;
i: integer;
procedure ProcessVariant(v : Variant);
begin
// Przykład określania co zawiera zmienna Variant:
Case varType(v) of
varEmpty:
Writeln('Pusta');
varNull:
Writeln('Null');
varSingle:
Writeln('Typ danych: Single');
varDouble:
Writeln('Typ danych: Double');
varDecimal:
Writeln('Typ danych: Decimal');
varCurrency:
Writeln('Typ danych: Currency');
varDate:
Writeln('Typ danych: Date');
varOleStr:
Writeln('Typ danych: UnicodeString');
varStrArg:
Writeln('Typ danych: Ciąg string zgodny z COM');
varString:
Writeln('Typ danych: Wskaźnik do dynamicznego ciągu string');
varDispatch:
Writeln('Typ danych: Wskaźnik do obiektu automatyzacji');
varBoolean:
Writeln('Typ danych: Wordbool');
varVariant:
Writeln('Typ danych: Variant');
varUnknown:
Writeln('Typ danych: nieznany');
varShortInt:
Writeln('Typ danych: ShortInt');
varSmallint:
Writeln('Typ danych: Smallint');
varInteger:
Writeln('Typ danych: Integer');
varInt64:
Writeln('Typ danych: Int64');
varByte:
Writeln('Typ danych: Byte');
varWord:
Writeln('Typ danych: Word');
varLongWord:
Writeln('Typ danych: LongWord');
varQWord:
Writeln('Typ danych: QWord');
varError:
Writeln('BŁĄD określający typ wariantu');
else
Writeln('Nie można określić typu wariantu');
end;
end;
begin
// Przykład 1:
// Przypisanie wartości:
v := 1;
//Przykłady dopuszczalnych przypisań typu, audytu/konwersji typu danych:
//Jawne konwersje typów danych
s := VarToStr(v);
Writeln('s:',s);
s := AnsiString(v);
Writeln('s:',s);
i := Integer(v);
Writeln('i:',i);
//Niejawna konwersja typu danych:
i := v;
Writeln('i:',i);
ProcessVariant(10);
ProcessVariant(True);
ProcessVariant('Pascal');
ProcessVariant(10.244);
end.
Wyjście:
s:1 s:1 i:1 i:1 Datatype: ShortInt Datatype: Wordbool Datatype: Wskaźnik do dynamicznego ciągu string Datatype: Double