Sign in Join
Wiki copytemporary

Basic Pascal Tutorial/Chapter 3/IF/bg: what changed

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

Title: Basic Pascal Tutorial/Chapter 3/IF/bg

OldNewLine
1+Обратно в [[Reserved words|Резервирани думи]].
2+
3+## IF
4+
5+*(author: Tao Yue, state: changed)*
6+
7+Операторът `IF` ви позволява да разклонявате програмата въз основа на резултата от булева операция. Простото разклоняване изглежда така:
8+
9+``` pascal
10+if BooleanExpression then
11+ StatementIfTrue;
12+```
13+
14+Ако булевия израз **BooleanExpression** се изчисли като `true`, операторът **StatementIfTrue** ще се изпълни. В противен случай ще се пропусне.
15+
16+Операторът `IF` приема само един оператор. Ако искате да се разклоните към поредица от оператори, трябва да ги заградите в `begin-end` [[Frame|блок]], за да изпълните всички оператори:
17+
18+``` pascal
19+if BooleanExpression then
20+begin
21+ Statement1;
22+ Statement2;
23+end;
24+```
25+
26+Двойното разклонение изглежда така:
27+
28+``` pascal
29+if BooleanExpression then
30+ StatementIfTrue
31+else
32+ StatementIfFalse;
33+```
34+
35+Забележете, че няма `;` преди `else`, дори и в случая на съставен оператор `begin-end`.
36+
37+``` pascal
38+if BooleanExpression then
39+begin
40+ Statement1;
41+ Statement2;
42+end
43+else
44+begin
45+ Statement3;
46+ Statement4;
47+end;
48+```
49+
50+Ако **BooleanExpression** се пресметне като `FALSE`, тогава ще се изпълни операторът след `else`. Не <u>трябва</u> да използвате `;` след оператора, който е предшества `else`. Това кара компилатора да си мисли, че това е оператор само с едно разклонение, и да се чуди откъде се е взело следващото `else`. A когато компилаторът се чуди, той обикновено извежда съобщение за грешка.
51+
52+Ако имате нужда от повече разклонения, можете да вложите няколко `if` оператора:
53+
54+``` pascal
55+if Condition1 then
56+ Statement1
57+else
58+ if Condition2 then
59+ Statement2
60+ else
61+ Statement3;
62+```
63+
64+Бъдете внимателни с влагането. Понякога компилатора няма да направи това, което си мислите:
65+
66+``` pascal
67+if Condition1 then
68+ if Condition2 then
69+ Statement2
70+else
71+ Statement1;
72+```
73+
74+Приема се, че `else` винаги се отнася за последния `if`, така че компилатора интерпретира предишните редове като:
75+
76+``` pascal
77+if Condition1 then
78+ if Condition2 then
79+ Statement2
80+ else
81+ Statement1;
82+```
83+
84+Може да коригирате с празен оператор:
85+
86+``` pascal
87+if Condition1 then
88+ if Condition2 then
89+ Statement2
90+ else
91+else
92+ Statement1;
93+```
94+
95+Или може да използвате `begin-end` блок.
96+
97+Следващото доказва как `;` е *абсолютно забранено* преди else:
98+
99+``` pascal
100+// Paul Robinson 2020-12-16
101+
102+// Compiler test program Err03.pas
103+// tests the proposition that ; is
104+// never legal before ELSE
105+
106+program err03;
107+Var
108+ Test,test2: Boolean;
109+Begin
110+ Test := True;
111+ Test2 := true;
112+ if test then
113+ if test2 then
114+ Writeln('Reached Part 1'); // semi-colon here should be illegal
115+ else
116+ Writeln('Reached Part 2');
117+end.
118+```
119+
120+Най-добрия начин да се изчисти проблема е да се пренапише условието.
121+
122+``` pascal
123+if not Condition1 then
124+ Statement1
125+else
126+ if Condition2 then
127+ Statement2;
128+```
129+
130+Този пример илюстрира как оператора not може да е много полезен. Ако Condition1 е булев израз като: `(not(a < b) or (c + 3 > 6)) and g`, "обръщането" на израза е доста по-сложно от отрицанието му с `NOT`.
131+
132+Също така забележете колко е важен отстъпът отляво когато човек чете логиката на програмния код, но пък компилатора не се интересува от празните символи.
133+
134+---
135+*From the Free Pascal wiki, page "Basic Pascal Tutorial/Chapter 3/IF/bg", as it stood on 2022-08-20 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