Sign in Join
Wiki copytemporary

Generics/pl: what changed

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

Title: Generics/pl

OldNewLine
1+## Wprowadzenie
2+
3+[[FPC]] ma oficjalne wsparcie dla typów generycznych w trybie [[Mode ObjFPC|{$mode ObjFPC}]] począwszy od wersji 2.2. i w trybie [[Mode Delphi|{$mode Delphi}]] począwszy od wersji 2.6.0.
4+
5+Typy generyczne czasami są nazywane typami parametryzowanymi lub uogólnionymi.
6+
7+FPC wspiera dwa różne dialekty, ponieważ typy generyczne zostały zaimplementowane w FPC kilka lat wcześniej niż w [[Delphi]].
8+
9+Możliwe jest używanie w [[Unit|module]] zapisów w składni `{$mode ObjFPC}` oraz innych modułów, które używają składnię `{$mode Delphi}`, i na odwrót.
10+
11+Biblioteka **Free Generics Library** lub **FGL** jest zbiorem generycznych kolekcji zapisanych natywnie `{$mode ObjFPC}`.
12+
13+Pakiet **rtl-generics** jest większym, i bardziej potężnym zbiorem pojemników generycznych zapisanych w `{$mode Delphi}` ponieważ stara się być kompatybilny z biblioteką generyczną Delphi. Ten pakiet jest dołączany standardowo do FPC 3.1.1.+ ale jest dosttępny już od wersji FPC 3.0.4.
14+
15+Obydwie biblioteki **FGL** i **rtl-generics** mogą być użyte w obydwu trybach składniowych.
16+
17+## moduł fgl
18+
19+Najprostszym sposobem, aby zacząć pracę z typami generycznymi, jest użycie modułu FGL, który jest jednostką prototypową modułu opartego o [[Class|klasy]] generyczne. Jak dotąd zawiera on kilka podstawowych klas:
20+
21+- TFPGList
22+- TFPGObjectList
23+- TFPGInterfacedObjectList
24+- TFPGMap
25+
26+### Rozpoczęcie
27+
28+Poniższy prosty przykład pokazuje, w jaki sposób przechowywać wiele instancjie klasy zdefiniowanej przez użytkownika na liście:
29+
30+``` pascal
31+{$mode objfpc}
32+uses fgl;
33+
34+type
35+ TMyClass = class(TObject)
36+ fld1 : string;
37+ end;
38+
39+ TMyList = specialize TFPGObjectList<TMyClass>;
40+
41+var
42+ list : TMyList;
43+ c : TMyClass;
44+
45+begin
46+ // utworzyć listę i dodać element
47+ list := TMyList.Create;
48+ c := TMyClass.Create;
49+ c.fld1 := 'c1';
50+ list.Add(c);
51+ // pobierz element z listy
52+ c := list[0];
53+```
54+
55+## Typowe klasy generyczne
56+
57+Jeśli typy generyczne zdefiniowane w jednostce FGL nie odpowiadają naszym potrzebom, to może trzeba definiować własne klasy rodzajowe od podstaw z wykorzystaniem podstawowych prymitywów językowych.
58+
59+Ogólny klasa jest zdefiniowana za pomocą [[Słowo kluczowe|Hasło]] „” „generic” „” przed nazwą klasy i użyć w deklaracji klasy: Klasa generyczna jest definiowana za pomocą słowa [[Słowo kluczowe|kluczowego]] **generic** przed nazwą klasy w deklaracji klasy:
60+
61+``` pascal
62+type
63+ generic TList<T> = class
64+ Items: array of T;
65+ procedure Add(Value: T);
66+ end;
67+```
68+
69+Przykład utworzenia klasy generycznej:
70+
71+``` pascal
72+implementation
73+
74+procedure TList.Add(Value: T);
75+begin
76+ SetLength(Items, Length(Items) + 1);
77+ Items[Length(Items) - 1] := Value;
78+end;
79+```
80+
81+Klasa generyczna, [[Object|object]], [[Record|record]], [[Interface|interface]] i [[Method|method]] może być też wyspecjalizowana poprzez użycie słowa kluczowego **specialize**.
82+
83+``` pascal
84+Type
85+ TIntegerList = specialize TList<Integer>;
86+ TPointerList = specialize TList<Pointer>;
87+ TStringList = specialize TList<string>;
88+```
89+
90+## Inne uwagi
91+
92+1. [[Compiler|kompilator]] przetwarza pliki generyczne, ale zamiast generowania kodu przechowuje wszystkie znaki w buforze, wewnątrz pliku PPU.
93+2. Kompilator analizuje typy specjalizacji; oraz ładuje bufor tokenów z pliku PPU i analizuje ponownie. Zastępuje typ generyczny parametrami (w większości przypadków "T") za pomocą określonego danego typu (na przykład *'[[Longint|longint]]'* *'[[TObject]]'*). Kod pojawia się w zasadzie tak, jakby ta sama klasa została napisana jako generyczna ale z T zastąpionym przez wybrany typu danych.
94+
95+## Przykład
96+
97+## Zobacz także
98+
99+- [[Templates]]
100+- [[Generics proposals]]
101+- [[Data Structures, Containers, Collections]]
102+
103+## Linki zewnętrzne
104+
105+---
106+*From the Free Pascal wiki, page "Generics/pl", as it stood on 2022-08-06 after a change by Kai Burghardt, 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