Sign in Join
Wiki copytemporary

Variant/pl: what changed

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

OldNewLine
11Powrót do [[Data type|typów danych]].
22
33Typ 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.
44
55Typ 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.
66
77W module Variants istnieją dwie przydatne funkcje do pracy z typami Variant:
88
99- Funkcja **VarType()** sprawdza, jaki typ danych zawiera wariant.
1010- Funkcja **VarToStr()** konwertuje wartość zmiennej typu Variant na reprezentację ciągu string.
1111
1212Definicja pola danych typu Variant. Zaleca się używanie [[Variants unit|modułu Variants]]:
1313
1414``` pascal
1515Uses
1616 Variants;
1717var
1818 v: Variant;
1919```
2020
2121Przykładowe użycie:
2222
2323``` pascal
2424uses
2525 Variants;
2626var
2727 v: Variant;
2828 s: string;
2929 i: integer;
3030
3131procedure ProcessVariant(v : Variant);
3232begin
3333
3434 // Przykład określania co zawiera zmienna Variant:
3535 Case varType(v) of
3636 varEmpty:
3737 Writeln('Pusta');
3838 varNull:
3939 Writeln('Null');
4040 varSingle:
4141 Writeln('Typ danych: Single');
4242 varDouble:
4343 Writeln('Typ danych: Double');
4444 varDecimal:
4545 Writeln('Typ danych: Decimal');
4646 varCurrency:
4747 Writeln('Typ danych: Currency');
4848 varDate:
4949 Writeln('Typ danych: Date');
5050 varOleStr:
5151 Writeln('Typ danych: UnicodeString');
5252 varStrArg:
5353 Writeln('Typ danych: Ciąg string zgodny z COM');
5454 varString:
5555 Writeln('Typ danych: Wskaźnik do dynamicznego ciągu string');
5656 varDispatch:
5757 Writeln('Typ danych: Wskaźnik do obiektu automatyzacji');
5858 varBoolean:
5959 Writeln('Typ danych: Wordbool');
6060 varVariant:
6161 Writeln('Typ danych: Variant');
6262 varUnknown:
6363 Writeln('Typ danych: nieznany');
6464 varShortInt:
6565 Writeln('Typ danych: ShortInt');
6666 varSmallint:
6767 Writeln('Typ danych: Smallint');
6868 varInteger:
6969 Writeln('Typ danych: Integer');
7070 varInt64:
7171 Writeln('Typ danych: Int64');
7272 varByte:
7373 Writeln('Typ danych: Byte');
7474 varWord:
7575 Writeln('Typ danych: Word');
7676 varLongWord:
7777 Writeln('Typ danych: LongWord');
7878 varQWord:
7979 Writeln('Typ danych: QWord');
8080 varError:
8181 Writeln('BŁĄD określający typ wariantu');
8282 else
8383 Writeln('Nie można określić typu wariantu');
8484 end;
8585end;
8686
8787begin
8888
8989 // Przykład 1:
9090 // Przypisanie wartości:
9191 v := 1;
9292
9393 //Przykłady dopuszczalnych przypisań typu, audytu/konwersji typu danych:
9494
9595 //Jawne konwersje typów danych
9696 s := VarToStr(v);
9797 Writeln('s:',s);
9898 s := AnsiString(v);
9999 Writeln('s:',s);
100100 i := Integer(v);
101101 Writeln('i:',i);
102102 //Niejawna konwersja typu danych:
103103 i := v;
104104 Writeln('i:',i);
105105
106106 ProcessVariant(10);
107107 ProcessVariant(True);
108108 ProcessVariant('Pascal');
109109 ProcessVariant(10.244);
110110
111111end.
112112```
113113
114114Wyjście:
115115
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`
116+```text
117+s:1
118+s:1
119+i:1
120+i:1
121+Datatype: ShortInt
122+Datatype: Wordbool
123+Datatype: Wskaźnik do dynamicznego ciągu string
124+Datatype: Double
125+```
124126
125127---
126128*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