Skip to content

Operators

Each operator has a precedence value. When an operator is part of an expression, it will bind more tightly to its operands the higher its precedence value.

Example
# Since "*" has higher precedence than "+",
# it will bind more tightly to 2 and 3,
# so this expression is evaluated (1 + (2 * 3))
1 + 2 * 3

Precedence 8

Power (**)

int ** int
Returns left to the power of right.
Note: Power is left associative.


Precedence 7

Multiply (*)

int * int
Returns left multiplied by right.

Divide (/)

int / int
Returns left divided by right.

Modulo (%)

int % int
Returns the remainder of dividing left by right.


Precedence 6

Add (+)

int + int
Returns left plus right.

string + string
Returns the concatenated string, left followed by right.

array + array
Returns the merged array containing all of left's values followed by all of right's values.

object + object
Returns left merged with right, with duplicate keys taking the value from right.

Subtract (-)

int - int
Returns left minus right.


Precedence 5

Left shift (<<)

int << int
Returns left, with all the bits in it shifted left, right amount of times.
Equivalent to left * (2 ** right). See wikipedia for more details.

array << any
Returns left with right appended to it.
If left is a variable, it mutates it.

Right shift (>>)

int >> int
Returns left, with all the bits in it shifted right, right amount of times.
Equivalent to left / (2 ** right). See wikipedia for more details.

any >> array
Returns right with left prepended to it.
If right is a variable, it mutates it.


Precedence 4

Less than (<)

sizeable < sizeable
Returns a boolean value, whether size of left is less than size of right.

Greater than (>)

sizeable > sizeable
Returns a boolean value, whether size of left is greater than size of right.

Less than or equal (<=)

sizeable < sizeable Returns a boolean value, whether size of left is less than or equal to size of right.

Greater than or equal (>=)

sizeable > sizeable
Returns a boolean value, whether size of left is greater than or equal to size of right.

Three-way comparison (<=>)

sizeable <=> sizeable
If size of left is greater than right, it returns an integer of value 1.
If size of left is lesser than right, it returns an integer of value -1.
If the size of both sides match, it returns an integer of value 0.


Precedence 3

Equal (==)

any == any
Returns a boolean value, whether left is equal to right.

Not equal (!=)

any != any
Returns a boolean value, whether left is not equal to right.


Precedence 2

Logical and (&&/and)

any && any
If left is truthy, return right. Otherwise, return left.

Logical or (||/or)

any || any
If left is truthy, return left. Otherwise, return right.


Precedence 1

Assign (=)

variable = any
Sets the value of left to right.

Operator assignments (+=/-=/*=//=/%=)

variable <operator>= any
Sets the value of left to the result of <operator> evaluated on left and right.

Example
x = 1
x += 2 # x == x + 2 == 3