Sign in Join
Wiki copytemporary

Revision 2 of 2, by Kai Burghardt on 8-20-2022. The page as it is now.

Basic Pascal Tutorial/Chapter 3/IF/bg

Обратно в Резервирани думи.

IF

(author: Tao Yue, state: changed)

Операторът IF ви позволява да разклонявате програмата въз основа на резултата от булева операция. Простото разклоняване изглежда така:

pascal
if BooleanExpression then
  StatementIfTrue;

Ако булевия израз BooleanExpression се изчисли като true, операторът StatementIfTrue ще се изпълни. В противен случай ще се пропусне.

Операторът IF приема само един оператор. Ако искате да се разклоните към поредица от оператори, трябва да ги заградите в begin-end блок, за да изпълните всички оператори:

pascal
if BooleanExpression then
begin
  Statement1;
  Statement2;
end;

Двойното разклонение изглежда така:

pascal
if BooleanExpression then
  StatementIfTrue
else
  StatementIfFalse;

Забележете, че няма ; преди else, дори и в случая на съставен оператор begin-end.

pascal
if BooleanExpression then
begin
  Statement1;
  Statement2;
end
else
begin
  Statement3;
  Statement4;
end;

Ако BooleanExpression се пресметне като FALSE, тогава ще се изпълни операторът след else. Не трябва да използвате ; след оператора, който е предшества else. Това кара компилатора да си мисли, че това е оператор само с едно разклонение, и да се чуди откъде се е взело следващото else. A когато компилаторът се чуди, той обикновено извежда съобщение за грешка.

Ако имате нужда от повече разклонения, можете да вложите няколко if оператора:

pascal
if Condition1 then
  Statement1
else
  if Condition2 then
    Statement2
  else
    Statement3;

Бъдете внимателни с влагането. Понякога компилатора няма да направи това, което си мислите:

pascal
if Condition1 then
  if Condition2 then
    Statement2
else
  Statement1;

Приема се, че else винаги се отнася за последния if, така че компилатора интерпретира предишните редове като:

pascal
if Condition1 then
  if Condition2 then
    Statement2
  else
    Statement1;

Може да коригирате с празен оператор:

pascal
if Condition1 then
  if Condition2 then
    Statement2
  else
else
  Statement1;

Или може да използвате begin-end блок.

Следващото доказва как ; е абсолютно забранено преди else:

pascal
// 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.

Най-добрия начин да се изчисти проблема е да се пренапише условието.

pascal
if not Condition1 then
  Statement1
else
  if Condition2 then
    Statement2;

Този пример илюстрира как оператора not може да е много полезен. Ако Condition1 е булев израз като: (not(a < b) or (c + 3 > 6)) and g, "обръщането" на израза е доста по-сложно от отрицанието му с NOT.

Също така забележете колко е важен отстъпът отляво когато човек чете логиката на програмния код, но пък компилатора не се интересува от празните символи.


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.