Sign in Join
Wiki copytemporary

Basic Pascal Tutorial/Chapter 3/IF/bg

English · Français · Български · 中文(中国) · 日本語

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

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.

Revision 2, last changed by WikiArchive .

Talk about this page

Nobody has opened a bench for this page yet. Sign in to open one.