Sign in Join
Wiki copytemporary

Set/ru: what changed

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

OldNewLine
11## Введение
22
3-**Set** представляет собой множество элементов из перечисленного набора значений и является порядковым типом.
4-
5-В качестве примера рассмотрим следующее перечисление:
3+**Set** представляет собой множество элементов из перечисленного набора значений и является порядковым типом.
64
7-``` pascal
8- TSpeed = (spVerySlow,spSlow,spAVerage,spFast,spVeryFast);
5+В качестве примера рассмотрим следующее перечисление:
96```
10-
11-И такое множество:
12-
13-``` pascal
14- TPossibleSpeeds = set of TSpeed
7+TSpeed = (spVerySlow,spSlow,spAVerage,spFast,spVeryFast);
158```
169
17-Значения множества TPossibleSpeeds могут быть определены с помощью скобок для перечисления элементов:
10+И такое множество:
11+```
12+TPossibleSpeeds = set of TSpeed
13+```
1814
19-``` pascal
20- const
21- RatherSlow = [spVerySlow,spSlow];
22- RatherFast = [spFast,spVeryFast];
15+Значения множества TPossibleSpeeds могут быть определены с помощью скобок для перечисления элементов:
2316```
17+const
18+ RatherSlow = [spVerySlow,spSlow];
19+ RatherFast = [spFast,spVeryFast];
20+```
2421
25-*RatherSlow* и *RatherFast* представляют некоторое множество из *TSpeed*.
22+_RatherSlow_ и _RatherFast_ представляют некоторое множество из _TSpeed_.
2623
2724## Операции над множествами
2825
29-В [[System unit/ru|модуле System]] библиотеки [[RTL/ru|RTL]] определены две функции, использующиеся для операций над множествами: [[Include/ru|Include]](ASet,AValue) и [[Exclude/ru|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;
26+В [[System unit/ru|модуле System]] библиотеки [[RTL/ru|RTL]] определены две функции, использующиеся для операций над множествами: [[Include/ru|Include]](ASet,AValue) и [[Exclude/ru|Exclude]](ASet,AValue).
3927```
40-
41-Множествами нельзя управлять напрямую, если они находятся в разделе *published*. Обычно в этом случае вам необходимо создать локальную копию, изменить её значение и затем вызвать *setter*.
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;
28+var
29+ SomeSpeeds: TPossibleSpeeds;
30+ begin
31+ SomeSpeeds := [];
32+ Include(SomeSpeeds,spVerySlow);
33+ Include(SomeSpeeds,spVeryFast);
34+ end;
5235```
5336
54-С помощью [[Keyword/ru|ключевого слова]] **[[In|in]]** можно также проверить, принадлежит ли значение множеству. Обычно оно используется следующим образом:
37+Множествами нельзя управлять напрямую, если они находятся в разделе _published_. Обычно в этом случае вам необходимо создать локальную копию, изменить её значение и затем вызвать _setter_.
38+```
39+procedure TSomething.DoSomething(Sender: TFarObject);
40+ var
41+ LocalCopy: TPossibleSpeeds;
42+ begin
43+ LocalCopy := Sender.PossibleSpeeds; // getter to local
44+ Include(LocalCopy,spVerySlow);
45+ Sender.PossibleSpeeds := LocalCopy; // local to setter.
46+ end;
47+```
5548
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;
49+С помощью [[Keyword/ru|ключевого слова]] **[[In|in]]** можно также проверить, принадлежит ли значение множеству. Обычно оно используется следующим образом:
6450```
51+var
52+ CanBeSlow: Boolean;
53+ const
54+ SomeSpeeds = [Low(TSpeed)..High(TSpeed)];
55+ begin
56+ CanBeSlow := (spVerySlow in SomeSpeeds) or (spSlow in SomeSpeeds);
57+ end;
58+```
6559
6660## Битовые маски
6761
68-Множества могут использоваться для создания битовых масок, как показано в следующем примере.
69-
70-``` pascal
62+Множества могут использоваться для создания битовых масок, как показано в следующем примере.
63+```
7164(*
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 .. // проверяет, установлен ли FLAG_A в переменной Flags
65+ FLAG_A = 1; // 1 shl 0
66+ FLAG_B = 2; // 1 shl 1
67+ FLAG_C = 4; // 1 shl 2
68+ *)
69+
70+ type
71+ TFlag = (FLAG_A, FLAG_B, FLAG_C);
72+ TFlags = set of TFlag;
73+
74+ var
75+ Flags: TFlags;
76+
77+ [..]
78+ Flags:= [FLAG_A, FLAG_C];
79+ if FLAG_A in Flags then .. // проверяет, установлен ли FLAG_A в переменной Flags
8780```
8881
82+Типы данных
83+---
84+Простые типы | [[Boolean/ru|Boolean]] | [[Byte/ru|Byte]] | [[Cardinal/ru|Cardinal]] | [[Char/ru|Char]] | [[Currency/ru|Currency]] | [[Extended/ru|Extended]] | [[Int64/ru|Int64]] | [[Integer/ru|Integer]] | [[Longint/ru|Longint]] | [[Pointer/ru|Pointer]] | [[Real/ru|Real]] | [[Shortint/ru|Shortint]] | [[Smallint/ru|Smallint]] | [[Word/ru|Word]]
85+Сложные типы | [[Array/ru|Array]] | [[Class/ru|Class]] | [[Record/ru|Record]] | Set | [[String/ru|String]] | [[Shortstring/ru|Shortstring]]
86+
8987---
90-*From the Free Pascal wiki, page "Set/ru", as it stood on 2021-02-16 after a change by Zoltanleo, 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).*
88+*From the Free Pascal wiki, page "Set/ru", as the Internet Archive kept it on 2024-11-25, last changed on 2021-02-17. 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