IF/bg

From Lazarus wiki
Revision as of 22:21, 21 April 2021 by Alpinistbg (talk | contribs)

български (bg) English (en) français (fr) 日本語 (ja) 中文(中国大陆)‎ (zh_CN)

 ◄   ▲   ► 


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


3Ca - 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.

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

 ◄   ▲   ►