Basic Pascal Tutorial/Chapter 3/IF/bg

From Lazarus wiki
Revision as of 21:42, 22 April 2021 by Alpinistbg (talk | contribs)
Jump to navigationJump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

български (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.

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

 ◄   ▲   ►