Operators
Table of contents
Operators
| Operator | Description | Example |
|---|---|---|
| and, && | Returns true if both operands are truthy values otherwise false | true && true |
| or, || | Returns the first truthy operand unless all are false and the last operand is returned | true || false |
| not, ! | Returns the inverse boolean value for a given operand | !true |
| + | Adds the values on either side of the operator together, aslo concatinates strings | 10 + 10, “hello” + “ world” |
| - | Subtracts the values on either side of the operator together | 10 - 10 |
| * | Multiplies the values on either side of the operator together | 10 * 2 |
| / | Divides the values on either side of the operator together. | 10 / 3 |
| % | Modulo of values on either side of the operator | 10 % 2 |
| ** | Exponent (power) of the values | 2 ** 2 |
| & | Bitwise AND of the values | 10 & 2 |
| ^ | Bitwise XOR of the values | 10 ^ 2 |
| | | Bitwise OR of the values | 10 | 2 |
| ~ | Bitwise NOT of the value | ~10 |
| « | Left shift operator, shifts bits left | 10 « 2 |
| « | Right shift operator, shifts bits right | 10 » 2 |
| += | Same as +, however its shorthand to assign too | x += 10 Same as x = x + 10 |
| ++ | Same as +, however its shorthand to assign too | x++ Same as x = x + 1 (postfix only for now) |
| -= | Same as -, however its shorthand to assign too | x -= 10 Same as x = x - 10 |
| – | Same as -, however its shorthand to assign too | x– Same as x = x - 1 (postfix only for now) |
| *= | Same as *, however its shorthand to assign too | x *= 10 Same as x = x * 10 |
| /= | Same as /, however its shorthand to assign too | x /= 10 Same as x = x / 10 |
| &= | Same as &, however its shorthand to assign too | x &= 10 Same as x = x & 10 |
| ^= | Same as ^, however its shorthand to assign too | x ^= 10 Same as x = x ^ 10 |
| |= | Same as |, however its shorthand to assign too | x |= 10 Same as x = x |
| ? | Ternary operator - See below | true ? ‘value’ : ‘other’ |
| ?? | Null coalescing operator - See below | x = func() ?? 12 |
| ??= | Null coalescing operator - See below | x ??= 12 |
| ?. | Optional chaining - Same as checking object != null first. | object?.someMethod() |
| || | Nullish coalescing operator - See below | x = func() || 12 |
| ||= | Nullish coalescing operator - See below | x ||= 12 |
Precedence
Precedence table from highest to lowest, with all operators having a left-to-right associativity.
| Operators |
| . () [] |
| ?. |
| ! - ~ |
| ** |
| * / |
| + - |
| « » |
| & |
| ^ |
| | |
| < > <= >= |
| == != |
| && |
| || |
| = |
Ternary Operator
The ternary operator is an operator which takes 3 operands and returns either the second or third depending on whether the first operand is truthy.
value := true ? "true!" : "false!"
println(value) // "true!"
otherValue := 0 ? "true!" : "false!"
println(otherValue) // "false!"
Null Coalescing Operator
The null coalescing operator is an operator which returns the value of its left-hand operand if it isn’t null; otherwise, it evaluates the right-hand operand and returns its result.
value := null ?? "not null"
println(value) // "not null"
otherValue := "not null" ?? "null"
println(otherValue) // "not null"
xVar := null
xVar ??= 12
println(xVar) // "12"
// xVar ??= 12 is the same as
if (xVar == null) {
xVar = 12
}
Nullish Coalescing Operator
The nullish coalescing operator is an operator which returns the value of its left-hand operand if it isn’t falsy; otherwise, it evaluates the right-hand operand and returns its result.
value := 0 || "not falsy"
println(value) // "not falsy"
otherValue := true || "false"
println(otherValue) // "true"
xVar := 0
xVar ||= 12
println(xVar) // "12"
// xVar ||= 12 is the same as
if (!xVar) {
xVar = 12
}
Falsy
The following are considered falsy:
| null |
| false |
| 0 |
| ””, ‘’ (empty strings) |
| [] (empty arrays) |
Where empty is defined as having a length of 0. Everything else is considered truthy.