Next: , Previous: or else, Up: Reference



or_else

Synopsis

     operator or_else (operand1, operand2: Boolean) = Result: Boolean;

Description

The or_else short-circuit logical operator performs the same operation as the logical operator or. But while the ISO standard does not specify anything about the evaluation of the operands of or – they may be evaluated in any order, or not at all – or_else has a well-defined behaviour: It evaluates the first operand. If the result is True, or_else returns True without evaluating the second operand. If it is False, the second operand is evaluated and returned.

GPC by default treats or and or_else exactly the same. If you want, for some reason, to have both operands of or evaluated completely, you must assign both to temporary variables and then use or – or or_else, it does not matter.

Conforming to

or_else is an ISO 10206 Extended Pascal extension.

Some people think that the ISO standard requires both operands of or to be evaluated. This is false. What the ISO standard does say is that you cannot rely on a certain order of evaluation of the operands of or; in particular things like the following program can crash according to ISO Pascal, although they cannot crash when compiled with GNU Pascal running in default mode.

     program OrBug;
     var
       a: Integer;
     begin
       ReadLn (a);
       if (a = 0) or (100 div a > 42) then  { This is *not* safe! }
         WriteLn ('You''re lucky. But the test could have crashed ...')
     end.

Example

     program Or_ElseDemo;
     var
       a: Integer;
     begin
       ReadLn (a);
       if (a = 0) or_else (100 div a > 42) then  { This is safe. }
         WriteLn ('100 div a > 42')
     end.

See also

Keywords, or else, or, and_then.