Expression Language
Simplicity and performance combined.
Zen is a business-first expression language used in GoRules decision tables. The language is designed to follow these principles:
- Side-effect free
- Dynamic types
- Simple syntax for broad audiences
It's primary objective is to bridge the gap between business analysts and engineers, while providing outstanding performance and readability.
Depending on the place of use and content of the expression, the evaluation of the language can happen in two modes: unary test or expression.
Most of the time, you will be writing unary expressions within the table cells.
Unary testโ
Unary test is a comma-separated list of simple expressions which evaluate to a boolean value.
Each comma separation is treated as or
operator. Inside unary expressions, a special symbol is available
$
which refers to a current column.
If $
is referred to in a column, unary will be turned into expressions mode.
// Given: $ = 1
1, 2, 3 // true
1 // true
>= 1 // true
< 1 // false
[0..10] // true, (internally this is $ >= 0 and $ <= 10)
> 0 and < 10 // true
// Given: $ = 'USD'
'GBP', 'USD' // true
'EUR' // false
startsWith($, "US") // true - defaults to expression mode, comma is unavailable
endsWith($, "US") // false - defaults to expression mode
lower($) == "usd" // true - defaults to expression mode
Expressionโ
Expressions feature full capability syntax of ZEN language. They give you access to all functions, and are most useful
when defining columns or outputs.
Full syntax is also available in unary expressions when $
is used (as it forces the expression mode).
100 + 100 // 200
10 * 5 // 50
10 ^ 2 // 100
1 in [1, 2, 3] // true
5 in (5..10] // false
sum([1, 2, 3]) // 6
max([1, 2, 3]) // 3
"hello" + " " + "world" // "hello world"
len("world") // 5
weekdayString(date("2022-11-08")) // "Tue"
contains("hello world", "hello") // true
upper('john') // "JOHN"
some(['admin', 'user'], # == "admin") // true
not all([100, 200, 400, 800], # in (100..800)) // false
filter([100, 200, 400, 800], # >= 200) // [200, 400, 800]
Playgroundโ
Try ZEN expressions using the tool below (errors are shown as null):
Data typesโ
Below you will find a list of all available data types. Each data type can define its own set of operators and built-in functions.
๐งต String
Sequence of characters and words
๐ฒ Number
Decimals and whole numbers
๐ฅ Boolean
Represents true or false values
๐๏ธ Date and time
Time manipulation functions
๐ Array
List of strings, numbers or booleans
๐ฎ Context
Read-only global object