Difference between revisions of "Else"

From Lazarus wiki
Jump to navigationJump to search
(→‎More statements in "if then else" statement: fix explanation and example for nested if..then..else)
(→‎More statements in "if then else" statement: fix explanation and example for nested if..then..else)
Line 61: Line 61:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
In this case, the "else" applies to "if b".  If this causes ambiguity, it can be resolved by coding an "empty" else statement:
+
In this case, the "else" applies to "not if a".  If this causes ambiguity, it can be resolved by coding an "empty" else statement:
 
<syntaxhighlight>
 
<syntaxhighlight>
 
   if a then
 
   if a then
       if b then  
+
       if b then
 
         begin
 
         begin
          (..)
+
          DoB
 
         end
 
         end
 
       else
 
       else
 
   else
 
   else
 
       begin
 
       begin
          (..)
+
        DoNotA
       end
+
       end;
 
</syntaxhighlight>
 
</syntaxhighlight>
  

Revision as of 14:26, 2 April 2018

Deutsch (de) English (en) español (es) suomi (fi) français (fr) русский (ru)

Else at Language Reference

Else is keyword which introduces the action to do if the condition is false.

If then else

  if (condition)
  then true_statement
  else false_statement;

The value of condition is evaluated, if it resolves to true, the true_statement is executed, otherwise the false_statement is executed. The value of condition must resolve to a boolean value or an error occurs.

More statements in "if then else" statement

If you need two or more statements for true_statement or false_statement, then the group of statements must be placed within a begin ... end Block.

  if boolean_condition then
    begin
      statement_one;
      statement_two;
    end 
  else
    begin
      statement_three;
      statement_four;
    end;

Notice that before the else keyword, no semicolon (;) is allowed. In the above example the first "end" statement is not followed by a semicolon but the last one is.

The following code wil not compile:

    if a then
      if b then
        begin
           (..)
        end;
      else   // Fatal: Syntax error, ";" expected but "ELSE" found
        begin
           (..)
        end;

Having nested if..then..else statement can easlily lead to ambiguity: which else belongs to which if? In this case, the "else" applies to "not if b"

  if a then
      if b then
        begin
           DoB;
        end
      else
        begin
           DoNotB;
        end;

In this case, the "else" applies to "not if a". If this causes ambiguity, it can be resolved by coding an "empty" else statement:

  if a then
      if b then
        begin
          DoB
        end
      else
  else
      begin
        DoNotA
      end;


Keywords: begindoelseendforifrepeatthenuntilwhile