Sign in Join
Wiki copytemporary

Variant/pl

Deutsch · English · Español · Français · Polski

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:

Definicja pola danych typu Variant. Zaleca się używanie modułu Variants:

pascal
Uses 
  Variants;
var
  v: Variant;

Przykładowe użycie:

pascal
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


From the Free Pascal wiki, page "Variant/pl", as it stood on 2021-11-25 after a change by Slawek, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.

Revision 1, last changed by WikiArchive .

Talk about this page

Nobody has opened a bench for this page yet. Sign in to open one.