Sign in Join
Wiki copytemporary

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

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

OldNewLine
11Обратно в [[Reserved words|Резервирани думи]].
22
33## IF
44
55*(author: Tao Yue, state: changed)*
66
77Операторът `IF` ви позволява да разклонявате програмата въз основа на резултата от булева операция. Простото разклоняване изглежда така:
88
99``` pascal
1010if BooleanExpression then
1111 StatementIfTrue;
1212```
1313
1414Ако булевия израз **BooleanExpression** се изчисли като `true`, операторът **StatementIfTrue** ще се изпълни. В противен случай ще се пропусне.
1515
1616Операторът `IF` приема само един оператор. Ако искате да се разклоните към поредица от оператори, трябва да ги заградите в `begin-end` [[Frame|блок]], за да изпълните всички оператори:
1717
1818``` pascal
1919if BooleanExpression then
2020begin
2121 Statement1;
2222 Statement2;
2323end;
2424```
2525
2626Двойното разклонение изглежда така:
2727
2828``` pascal
2929if BooleanExpression then
3030 StatementIfTrue
3131else
3232 StatementIfFalse;
3333```
3434
3535Забележете, че няма `;` преди `else`, дори и в случая на съставен оператор `begin-end`.
3636
3737``` pascal
3838if BooleanExpression then
3939begin
4040 Statement1;
4141 Statement2;
4242end
4343else
4444begin
4545 Statement3;
4646 Statement4;
4747end;
4848```
4949
50-Ако **BooleanExpression** се пресметне като `FALSE`, тогава ще се изпълни операторът след `else`. Не <u>трябва</u> да използвате `;` след оператора, който е предшества `else`. Това кара компилатора да си мисли, че това е оператор само с едно разклонение, и да се чуди откъде се е взело следващото `else`. A когато компилаторът се чуди, той обикновено извежда съобщение за грешка.
50+Ако **BooleanExpression** се пресметне като `FALSE`, тогава ще се изпълни операторът след `else`. Не трябва да използвате `;` след оператора, който е предшества `else`. Това кара компилатора да си мисли, че това е оператор само с едно разклонение, и да се чуди откъде се е взело следващото `else`. A когато компилаторът се чуди, той обикновено извежда съобщение за грешка.
5151
5252Ако имате нужда от повече разклонения, можете да вложите няколко `if` оператора:
5353
5454``` pascal
5555if Condition1 then
5656 Statement1
5757else
5858 if Condition2 then
5959 Statement2
6060 else
6161 Statement3;
6262```
6363
6464Бъдете внимателни с влагането. Понякога компилатора няма да направи това, което си мислите:
6565
6666``` pascal
6767if Condition1 then
6868 if Condition2 then
6969 Statement2
7070else
7171 Statement1;
7272```
7373
7474Приема се, че `else` винаги се отнася за последния `if`, така че компилатора интерпретира предишните редове като:
7575
7676``` pascal
7777if Condition1 then
7878 if Condition2 then
7979 Statement2
8080 else
8181 Statement1;
8282```
8383
8484Може да коригирате с празен оператор:
8585
8686``` pascal
8787if Condition1 then
8888 if Condition2 then
8989 Statement2
9090 else
9191else
9292 Statement1;
9393```
9494
9595Или може да използвате `begin-end` блок.
9696
9797Следващото доказва как `;` е *абсолютно забранено* преди else:
9898
9999``` pascal
100100// Paul Robinson 2020-12-16
101101
102102// Compiler test program Err03.pas
103103// tests the proposition that ; is
104104// never legal before ELSE
105105
106106program err03;
107107Var
108108 Test,test2: Boolean;
109109Begin
110110 Test := True;
111111 Test2 := true;
112112 if test then
113113 if test2 then
114114 Writeln('Reached Part 1'); // semi-colon here should be illegal
115115 else
116116 Writeln('Reached Part 2');
117117end.
118118```
119119
120120Най-добрия начин да се изчисти проблема е да се пренапише условието.
121121
122122``` pascal
123123if not Condition1 then
124124 Statement1
125125else
126126 if Condition2 then
127127 Statement2;
128128```
129129
130130Този пример илюстрира как оператора not може да е много полезен. Ако Condition1 е булев израз като: `(not(a < b) or (c + 3 > 6)) and g`, "обръщането" на израза е доста по-сложно от отрицанието му с `NOT`.
131131
132132Също така забележете колко е важен отстъпът отляво когато човек чете логиката на програмния код, но пък компилатора не се интересува от празните символи.
133133
134134---
135135*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