Operators in the Flux language

Flux includes the following types of operators:

Also see:

Arithmetic operators

Arithmetic operators take two numerical values (either literals or variables) and perform a calculation that returns a single numerical value.

OperatorDescriptionExampleResult
`+`Addition`1 + 1``2`
`-`Subtraction`3 - 2``1`
`*`Multiplication`2 * 3``6`
`/`Division`9 / 3``3`
`^`Exponentiation`2 ^ 3``8`
`%`Modulo`10 % 5``0`

In the current version of Flux, values used in arithmetic operations must be of the same numeric type (integer or float). Operations with values of different numeric types will result in a type error.

Comparison operators

Comparison operators compare expressions and return true or false based on the comparison.

OperatorDescriptionExampleResult
`==`Equal to`"abc" == "abc"``true`
`!=`Not equal to`"abc" != "def"``true`
`<`Less than`1 < 2``true`
`>`Greater than`1 > 2``false`
`<=`Less than or equal`1 <= 2``true`
`>=`Greater than or equal`1 >= 2``false`
`=~`Equal to regular expression`"abc" =~ /[a-z]*/``true`
`!~`Not equal to regular expression`"abc" !~ /[0-9]*/``true`

The `>` and `<` operators also compare the lexicographic order of strings.

Logical operators

OperatorDescription
`exists`Returns `false` if right operand is null. Otherwise, returns `true`.
`and`Returns `true` if both operands are true. Otherwise, returns `false`.
`or`Returns `true` if any operand is true. Otherwise, returns `false`.

Short-circuit evaluation

Flux logical operators observe the short-circuiting behavior seen in other programming languages. The evaluation of the left-hand (LH) operand determines if the right-hand (RH) operand is evaluated.

• When the operator is `and` and the LH operand evaluates to `false`, the evaluation returns `false` without evaluating the RH operand.
• When the operator is `or` and the LH operand evaluates to `true`, the evaluation returns `true` without evaluating the RH operand.

Assignment operators

An assignment operator assigns a value to its left operand based on the value of its right operand.

OperatorDescriptionExampleMeaning
`=`Assign value of left expression to right expression`x = y`x = y

Function operators

Function operators facilitate the creation of functions and control the flow of data through operations.

OperatorDescriptionExamplesMeaning
`|>`Pipe‑forward`data |> function()`Tables contained in the “data” variable are piped into the function.
`<-`Pipe‑receive`tables=<-`The “tables” variable or parameter is assigned to data piped into the operation. This operator is used for any data type passed into a function; not just table data.
`=>`Arrow`(r) => r.tag1 == "tagvalue"`The arrow passes a record or parameters into function operations.
`()`Function call`top(n:10)`Call the `top` function setting the `n` parameter to `10` and perform the associated operations.

See Custom functions for examples of function operators is use.

String Operators

String operators concatenate or compare string values.

OperatorDescriptionExamplesResult
`+`Concatenation`"ab" + "c"``"abc"`
`<`Less than in lexicographic order`"ant" < "bee"``true`
`>`Greater than in lexicographic order`"ant" > "bee"``false`

Literal constructors

Literal constructors define fixed values.

OperatorDescription
`[ ]`List / array
`{ }`Record
`""`String

Miscellaneous operators

OperatorDescriptionExample
`( )`Logical grouping`r._value / (r._value * 2)`
`,`Sequence delimiter`item1, item2, item3`
`:`Key-value separator`{name: "Bob"}`
`.`Member access / dot reference`r._measurement`

Operator precedence

The table below outlines operator precedence. Operators with a lower number have higher precedence.

PrecedenceOperatorDescription
1`a()`Function call
`a[]`Member or index access
`.`Member access
2`|>`Pipe forward
3`^`Exponentiation
4`*` `/` `%`Multiplication, division, and modulo
5`+` `-`Addition and subtraction
6`==` `!=`Comparison operators
`<` `<=`
`>` `>=`
`=~` `!~`
7`not`Unary logical operator
`exists`Null check operator
8`and`Logical AND
9`or`Logical OR
10`if` `then` `else`Conditional