◷ Reading Time: 6 minutes
Friendly Enough Expression Language (FEEL) is a standard language for defining decision logics in a way that is easy to understand for both business and technical experts. This article describes how the user can use FEEL operations to build up the business rules.
FEEL Operations for Boolean
Boolean Literal
True and false boolean values
true
false
Comparison
Compares two values and results in a boolean value
| Operator | Description |
| = | equal to |
| != | not equal to |
| < | less than |
| <= | less than or equal to |
| > | greater than |
| >= | greater than or equal to |
true = true
Result: True
7 != 8
Result: True
"hello" < "bye"
Result: False
3 <= 4
Result: True
3 > 4
Result: False
1 >= 1
Result: True
and/ or
Combines multiple boolean values
true and true
Result: True
true and false
Result: False
true or true
Result: True
true or false
Result: True
in
Use the in operator to check if a specified range matches a given value.
1 in [1..10]
Result: true
1 in (1..10]
Result: false
10 in [1..10]
Result: true
10 in [1..10)
Result: false
null
Any value in FEEL operations can be compared with null. This checks if it is null or if it doesn’t exist. It will return a boolean value
true = null
Result: false
false = null
Result: False
true or null
Result: True
null = null
Result: True
FEEL Operation String
String Literal
String value
"hello"
Concatenation
Addition of strings
"hello" + " world"
Result: "hello world"
FEEL Operation for Numeric
Number Literal
Numeric values
5
-5
3.67
0.05
-0005
Addition
Adds a value to another value
5 + 1
Result: 6
Subtraction
Subtracts a value to another value
5 - 6
Result: -1
Multiplication
Multiplies a value to another value
5 * 6
Result: 30
Division
Numeric values
5.0 / 6.0
Result: 0.8333333333333334
Exponentation
Numeric values
5 ** 6
Result: 15625
FEEL Operations and Functions for List
Literal
List of given elements. Nested lists are valid
[1, "a", 2, "b", 3, "c"]
[[1, "a"], [2, "b"], [3, "c"]]
some-in-satisfies
To identify conditions where at least one requirement is met to determine a valid outcome, we can use some-in-satisfies format:
some condition in context satisfies result applied condition
For example:
some x in [2,4,6,8] satisfies x>5
result: True
some x in [2,4,6,8], y in [4,5,6,12] satisfies x>y
result: True
every-in-satisfies
To identify conditions where all requirement is met to determine a valid outcome, we can use every-in-satisfies format:
every condition in context satisfies result applied condition
For example:
every x in [2,4,6,8] satisfies x>5
result: False
Filters
The FEEL operations and functions able the user to filter a list with simple approach, see the examples:
The default name for the elements is “item”.
Example: [4,5,10,22][1]
Result: 4
Example: [4,5,10,22][-2]
Result: 10
Example: [4,5,10,22][item > 5]
Result: [10,22]
Example: [4,5,10,22][modulo (item,2)=1]
Result: 5
Control Structures
for-in-return
When iterating through conditions, evaluating each, and returning a final outcome, we can use for-in-return format:
for condition in context return applied condition
For example:
for x in [2,4,6,8] return x-1
result: [1,3,5,7]
if-then-else
The alternative to an inline condition operator is to use the if-then-else format:
if condition then result else other-result
For example:
if 3==4 then 'this is cool' else 'what are you talking about?'
result: what are you talking about?