Sign in Join
Wiki copytemporary

Variant/pl: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: Variant/pl

OldNewLine
1+Powrót do [[Data type|typów danych]].
2+
3+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.
4+
5+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.
6+
7+W module Variants istnieją dwie przydatne funkcje do pracy z typami Variant:
8+
9+- Funkcja **VarType()** sprawdza, jaki typ danych zawiera wariant.
10+- Funkcja **VarToStr()** konwertuje wartość zmiennej typu Variant na reprezentację ciągu string.
11+
12+Definicja pola danych typu Variant. Zaleca się używanie [[Variants unit|modułu Variants]]:
13+
14+``` pascal
15+Uses
16+ Variants;
17+var
18+ v: Variant;
19+```
20+
21+Przykładowe użycie:
22+
23+``` pascal
24+uses
25+ Variants;
26+var
27+ v: Variant;
28+ s: string;
29+ i: integer;
30+
31+procedure ProcessVariant(v : Variant);
32+begin
33+
34+ // Przykład określania co zawiera zmienna Variant:
35+ Case varType(v) of
36+ varEmpty:
37+ Writeln('Pusta');
38+ varNull:
39+ Writeln('Null');
40+ varSingle:
41+ Writeln('Typ danych: Single');
42+ varDouble:
43+ Writeln('Typ danych: Double');
44+ varDecimal:
45+ Writeln('Typ danych: Decimal');
46+ varCurrency:
47+ Writeln('Typ danych: Currency');
48+ varDate:
49+ Writeln('Typ danych: Date');
50+ varOleStr:
51+ Writeln('Typ danych: UnicodeString');
52+ varStrArg:
53+ Writeln('Typ danych: Ciąg string zgodny z COM');
54+ varString:
55+ Writeln('Typ danych: Wskaźnik do dynamicznego ciągu string');
56+ varDispatch:
57+ Writeln('Typ danych: Wskaźnik do obiektu automatyzacji');
58+ varBoolean:
59+ Writeln('Typ danych: Wordbool');
60+ varVariant:
61+ Writeln('Typ danych: Variant');
62+ varUnknown:
63+ Writeln('Typ danych: nieznany');
64+ varShortInt:
65+ Writeln('Typ danych: ShortInt');
66+ varSmallint:
67+ Writeln('Typ danych: Smallint');
68+ varInteger:
69+ Writeln('Typ danych: Integer');
70+ varInt64:
71+ Writeln('Typ danych: Int64');
72+ varByte:
73+ Writeln('Typ danych: Byte');
74+ varWord:
75+ Writeln('Typ danych: Word');
76+ varLongWord:
77+ Writeln('Typ danych: LongWord');
78+ varQWord:
79+ Writeln('Typ danych: QWord');
80+ varError:
81+ Writeln('BŁĄD określający typ wariantu');
82+ else
83+ Writeln('Nie można określić typu wariantu');
84+ end;
85+end;
86+
87+begin
88+
89+ // Przykład 1:
90+ // Przypisanie wartości:
91+ v := 1;
92+
93+ //Przykłady dopuszczalnych przypisań typu, audytu/konwersji typu danych:
94+
95+ //Jawne konwersje typów danych
96+ s := VarToStr(v);
97+ Writeln('s:',s);
98+ s := AnsiString(v);
99+ Writeln('s:',s);
100+ i := Integer(v);
101+ Writeln('i:',i);
102+ //Niejawna konwersja typu danych:
103+ i := v;
104+ Writeln('i:',i);
105+
106+ ProcessVariant(10);
107+ ProcessVariant(True);
108+ ProcessVariant('Pascal');
109+ ProcessVariant(10.244);
110+
111+end.
112+```
113+
114+Wyjście:
115+
116+`s:1`\
117+`s:1`\
118+`i:1`\
119+`i:1`\
120+`Datatype: ShortInt`\
121+`Datatype: Wordbool`\
122+`Datatype: Wskaźnik do dynamicznego ciągu string`\
123+`Datatype: Double`
124+
125+---
126+*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](/wiki-contact).*

Back to history