Logic Operators

Comparison Operators

OperatorDescription
==equals to
!=not equals to
>greater than
>=greater than or equals to
<less than
<=less than or equals to

Comparing most values of the same data type work out-of-the-box for all standard types supported by the system.

However, if using a raw Engine without loading any packages, comparisons can only be made between a limited set of types (see built-in operators).


#![allow(unused)]
fn main() {
42 == 42;               // true

42 > 42;                // false

"hello" > "foo";        // true

"42" == 42;             // false
}

Comparing two values of different data types, or of unknown data types, always results in false, except for ‘!=‘ (not equals) which results in true. This is in line with intuition.


#![allow(unused)]
fn main() {
42 == 42.0;             // false - i64 cannot be compared with f64

42 != 42.0;             // true - i64 cannot be compared with f64

42 > "42";              // false - i64 cannot be compared with string

42 <= "42";             // false - i64 cannot be compared with string

let ts = new_ts();      // custom type

ts == 42;               // false - types cannot be compared

ts != 42;               // true - types cannot be compared
}

Boolean operators

OperatorDescriptionShort-Circuits?
! (prefix)boolean NOTno
&&boolean ANDyes
&boolean ANDno
||boolean ORyes
|boolean ORno

Double boolean operators && and || short-circuit – meaning that the second operand will not be evaluated if the first one already proves the condition wrong.

Single boolean operators & and | always evaluate both operands.


#![allow(unused)]
fn main() {
a() || b();             // b() is not evaluated if a() is true

a() && b();             // b() is not evaluated if a() is false

a() | b();              // both a() and b() are evaluated

a() & b();              // both a() and b() are evaluated
}

All boolean operators are built in for the bool data type.