Skip to content

Operators

Table

The table below contains the operators in NPL, the equivalent method name, a short explanation, an example, and a precedence level (where 1 indicates the highest precedence).

Most operators can be also expressed using a functional syntax, for example 2.plus(3) is the same as 2 + 3.

Operator Method name Explanation Example Precedence Operates on
= N/A assignment = expr 1 any value
! not logical complement (not) !expr 2 Boolean
- negative arithmetic negation -expr 2 Number, Amount
* multiplyBy arithmetic multiplication expr * expr 3 Number and Number,
Amount and Number
/ divideBy arithmetic division expr / expr 3 Number and Number,
Amount and Number
% remainder arithmetic division remainder expr % expr 3 Number and Number,
Amount and Number
+ plus arithmetic addition expr + expr 4 Number and Number,
Amount and Amount
+ plus concatenation expr + expr 4 Text and Text,
List and List,
Set and Set
+ plus time addition expr + expr 4 DateTime and Duration,
DateTime and Period
- minus arithmetic subtraction expr - expr 4 Number and Number,
Amount and Amount
- minus time subtraction expr - expr 4 DateTime and Duration,
DateTime and Period
> greaterThan greater than comparison expr > expr 5 Number and Number,
Text and Text
>= greaterThanOrEqual greater than or equal to comparison expr >= expr 5 Number and Number,
Text and Text
< lessThan less than comparison expr < expr 5 Number and Number,
Text and Text
<= lessThanOrEqual less than or equal to comparison expr <= expr 5 Number and Number,
Text and Text
== N/A equality comparison expr == expr 6 any two values
!= N/A inequality comparison expr != expr 6 any two values
&& N/A logical and expr && expr 7 Boolean and Boolean
|| N/A logical or expr || expr 8 Boolean and Boolean

Equality

Equality comparisons for types that hold other types, such as Optional and collections, and performed element-wise. While this makes equality comparisons compatible with unions, it also means that in some cases types with different type parameters may be considered equal.

Given

union U { Number, Text }

the following are all true

optionalOf<Number>(1) == optionalOf<U>(1)
optionalOf<Number>()  == optionalOf<U>()
optionalOf<Number>()  == optionalOf<Text>()

Remainder

The remainder operator (%) supports negative dividend and divisor. The sign of the divisor does not affect the result. The sign of the result is the same as the sign of the dividend. The following examples illustrate this.

47 % 10,
47 % -10,
7 // all equal
-47 % 10,
-47 % -10,
-7 // all equal
50 % 10,
50 % -10,
-50 % 10,
-50 % -10,
0 // all equal
5.8 % 2.2,
5.8 % -2.2,
1.4 // all equal
-5.8 % 2.2,
-5.8 % -2.2,
-1.4 // all equal

Operator context

Each operator's meaning in the context of types is described with the type. Parties have their own operators, and are described in party expressions.