Skip to main content

Boolean Or

rascal-0.34.0

Synopsis

The or operator on Boolean values.

Syntax

Exp₁ || Exp₂

Types

//

Exp₁Exp₂Exp₁ \|\| Exp₂
boolboolbool

Description

The or operator on Boolean values defined as follows:

Exp₁Exp₂Exp₁ \|\| Exp₂
truetruetrue
truefalsetrue
falsetruetrue
falsefalsefalse

Boolean operators have short circuit semantics: only those operands are evaluated that are needed to compute the result. In the case of the || operator, the result is true if Exp₁ evaluates to true, otherwise Exp₂ is evaluated to determine the result.

Note that || will backtrack over its argument expressions until it can find an evaluation that is true, unless there is none.

Variable assignments as a result of matching or generator expressions under a || are visible outside the context of the operator, but only if the context is conditional, such as an if-then-else or a for loop. Note that it is statically required that both sides of an || introduce the same variable names of the same type.

Examples

rascal>import IO;
ok
rascal>false || true;
bool: true
rascal>(i <- [1,2,3,4] && i % 2 == 0) || false
bool: true
rascal>for ((i <- [1,2,3,4] && i % 2 == 0) || false)
>>>>>>> println("true for <i>");
true for 2
true for 4
list[void]: []