Sign in Join
Wiki copytemporary

Set/fi: what changed

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

Title: Set/fi

OldNewLine
1+## Johdanto
2+
3+Joukko (Set) koodaa monia arvoja luetelluista tyypeistä (enumeration) järjestyksen (ordinal) omaaviin tyyppeihin.
4+
5+Tarkastellaan esimerkiksi tätä lueteltua tyyppiä:
6+
7+``` pascal
8+ TSpeed = (spVerySlow,spSlow,spAVerage,spFast,spVeryFast);
9+```
10+
11+Ja tämä joukko:
12+
13+``` pascal
14+ TPossibleSpeeds = set of TSpeed;
15+```
16+
17+TPossibleSpeedsin [[Constant/fi|kiinteät]] vakiojoukot määritellään niin että annetaan [[square brackets/fi|hakasulkujen]] sisällä joukkoon kuuluvat alkiot:
18+
19+``` pascal
20+ const
21+ RatherSlow = [spVerySlow,spSlow];
22+ RatherFast = [spFast,spVeryFast];
23+```
24+
25+RatherSlow ja RatherFast ovat joitakin TSpeed:n osajoukkoja.
26+
27+## Joukkojen käsittely
28+
29+Kaksi [[Function/fi|funktiota]] on määritelty [[RTL/fi|RTL]]:n [[System unit]] joita käytetään joukkojen käsittelemiseen [[Include]](ASet,AValue) ja [[Exclude]](ASet,AValue).
30+
31+``` pascal
32+ var
33+ SomeSpeeds: TPossibleSpeeds;
34+ begin
35+ SomeSpeeds := [];
36+ Include(SomeSpeeds,spVerySlow);
37+ Include(SomeSpeeds,spVeryFast);
38+ end;
39+```
40+
41+Joukkoja ei voida suoraan käsitellä, jos ne on julkaistu. Vaan on yleensä tehtävä paikallinen kopio, muutokset paikalliskopioon ja kutsutaan asettaja.
42+
43+``` pascal
44+ procedure TSomething.DoSomething(Sender: TFarObject);
45+ var
46+ LocalCopy: TPossibleSpeeds;
47+ begin
48+ LocalCopy := Sender.PossibleSpeeds; // getter to local
49+ Include(LocalCopy,spVerySlow);
50+ Sender.PossibleSpeeds := LocalCopy; // local to setter.
51+ end;
52+```
53+
54+[[Reserved word/fi|Varattua sanaa]] [[In/fi|in]] käytetään testaukseen, onko arvo joukossa. Sitä käytetään esimerkiksi tällä tavalla:
55+
56+``` pascal
57+ var
58+ CanBeSlow: Boolean;
59+ const
60+ SomeSpeeds = [Low(TSpeed)..High(TSpeed)];
61+ begin
62+ CanBeSlow := (spVerySlow in SomeSpeeds) or (spSlow in SomeSpeeds);
63+ end;
64+```
65+
66+## Bittimaskit
67+
68+Joukkoja voidaan käyttää luomaan bittimaskeja kuten on esitetty esimerkissä.
69+
70+``` pascal
71+(*
72+ FLAG_A = 1; // 1 shl 0
73+ FLAG_B = 2; // 1 shl 1
74+ FLAG_C = 4; // 1 shl 2
75+*)
76+
77+type
78+ TFlag = (FLAG_A, FLAG_B, FLAG_C);
79+ TFlags = set of TFlag;
80+
81+var
82+ Flags: TFlags;
83+
84+[..]
85+ Flags:= [FLAG_A, FLAG_C];
86+ if FLAG_A in Flags then .. // check FLAG_A is set in flags variable
87+```
88+
89+---
90+*From the Free Pascal wiki, page "Set/fi", as it stood on 2019-11-16 after a change by Djzepi, 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