Basic Pascal Tutorial/Chapter 3/IF/bg
│
български (bg) │
English (en) │
français (fr) │
日本語 (ja) │
中文(中国大陆) (zh_CN) │
Обратно в Резервирани думи.
IF
(author: Tao Yue, state: changed)
Операторът IF ви позволява да разклонявате програмата въз основа на резултата от булева операция. Простото разклоняване изглежда така:
if BooleanExpression then
StatementIfTrue;
Ако булевия израз BooleanExpression се изчисли като true, операторът StatementIfTrue ще се изпълни. В противен случай ще се пропусне.
Операторът IF приема само един оператор. Ако искате да се разклоните към поредица от оператори, трябва да ги заградите в begin-end блок, за да изпълните всички оператори:
if BooleanExpression then
begin
Statement1;
Statement2;
end;
Двойното разклонение изглежда така:
if BooleanExpression then
StatementIfTrue
else
StatementIfFalse;
Забележете, че няма ; преди else, дори и в случая на съставен оператор begin-end.
if BooleanExpression then
begin
Statement1;
Statement2;
end
else
begin
Statement3;
Statement4;
end;
Ако BooleanExpression се пресметне като FALSE, тогава ще се изпълни операторът след else. Не трябва да използвате ; след оператора, който е предшества else. Това кара компилатора да си мисли, че това е оператор само с едно разклонение, и да се чуди откъде се е взело следващото else. A когато компилаторът се чуди, той обикновено извежда съобщение за грешка.
Ако имате нужда от повече разклонения, можете да вложите няколко if оператора:
if Condition1 then
Statement1
else
if Condition2 then
Statement2
else
Statement3;
Бъдете внимателни с влагането. Понякога компилатора няма да направи това, което си мислите:
if Condition1 then
if Condition2 then
Statement2
else
Statement1;
Приема се, че else винаги се отнася за последния if, така че компилатора интерпретира предишните редове като:
if Condition1 then
if Condition2 then
Statement2
else
Statement1;
Може да коригирате с празен оператор:
if Condition1 then
if Condition2 then
Statement2
else
else
Statement1;
Или може да използвате begin-end блок.
Следващото доказва как ; е абсолютно забранено преди else:
// Paul Robinson 2020-12-16
// Compiler test program Err03.pas
// tests the proposition that ; is
// never legal before ELSE
program err03;
Var
Test,test2: Boolean;
Begin
Test := True;
Test2 := true;
if test then
if test2 then
Writeln('Reached Part 1'); // semi-colon here should be illegal
else
Writeln('Reached Part 2');
end.
Най-добрия начин да се изчисти проблема е да се пренапише условието.
if not Condition1 then
Statement1
else
if Condition2 then
Statement2;
Този пример илюстрира как оператора not може да е много полезен. Ако Condition1 е булев израз като: (not(a < b) or (c + 3 > 6)) and g, "обръщането" на израза е доста по-сложно от отрицанието му с NOT.
Също така забележете колко е важен отстъпът отляво когато човек чете логиката на програмния код, но пък компилатора не се интересува от празните символи.