Datatypen
DXL kent zes basisdatatypen plus entiteiten voor gestructureerde data.
Number
Getallen, zowel geheel als met decimalen.
42 // Geheel getal
3.14 // Decimaal getal
-5 // Negatief getal
0.001 // Klein decimaal
Rekenkundige operaties
1 + 2 // 3
10 - 3 // 7
4 * 5 // 20
15 / 3 // 5
17 % 5 // 2 (modulo/rest)
-x // Negatie
Number methodes
| Methode | Voorbeeld | Resultaat | Beschrijving |
|---|---|---|---|
abs() | (-5).abs() | 5 | Absolute waarde |
round() | 3.7.round() | 4 | Afronden naar dichtstbijzijnde geheel |
round(n) | 3.14159.round(2) | 3.14 | Afronden op n decimalen |
floor() | 3.9.floor() | 3 | Naar beneden afronden |
ceil() | 3.1.ceil() | 4 | Naar boven afronden |
clamp(min, max) | 15.clamp(0, 10) | 10 | Beperk tot bereik |
to_text() | 42.to_text() | "42" | Converteer naar tekst |
format(p) | 3.14159.format("0.00") | "3.14" | Formatteren |
Gebruik haakjes rond negatieve getallen bij methode-aanroepen: (-5).abs() in plaats van -5.abs().
Text
Tekst (strings) tussen dubbele aanhalingstekens.
"Hallo wereld"
"Met \"escape\" tekens"
"Regel 1\nRegel 2"
"" // Lege string
Escape sequences
| Sequence | Betekenis |
|---|---|
\" | Dubbel aanhalingsteken |
\\ | Backslash |
\n | Nieuwe regel |
\r | Carriage return |
\t | Tab |
Text operaties
"hello" + " " + "world" // "hello world" (concatenatie)
Text methodes
| Methode | Voorbeeld | Resultaat | Beschrijving |
|---|---|---|---|
len() | "hello".len() | 5 | Aantal tekens |
upper() | "hello".upper() | "HELLO" | Hoofdletters |
lower() | "WORLD".lower() | "world" | Kleine letters |
trim() | " hi ".trim() | "hi" | Verwijder witruimte |
contains(s) | "hello".contains("ell") | true | Bevat substring? |
starts_with(s) | "hello".starts_with("he") | true | Begint met? |
ends_with(s) | "hello".ends_with("lo") | true | Eindigt met? |
replace(old, new) | "hello".replace("l", "x") | "hexxo" | Vervangen |
substr(start) | "hello".substr(2) | "llo" | Substring vanaf |
substr(start, len) | "hello".substr(1, 3) | "ell" | Substring met lengte |
split(delim) | "a,b,c".split(",") | ["a","b","c"] | Splits naar array |
to_number() | "42".to_number() | 42 | Converteer naar getal |
to_date() | "2024-06-15".to_date() | 2024-06-15 | Converteer naar datum |
Automatische conversie
Bij concatenatie worden niet-tekst waarden automatisch geconverteerd:
"Score: " + 42 // "Score: 42"
"Status: " + true // "Status: true"
"Datum: " + today // "Datum: 2024-06-15"
Boolean
Logische waarden: true of false.
true
false
Vergelijkingsoperatoren
1 == 1 // true (gelijk aan)
1 != 2 // true (niet gelijk aan)
1 < 2 // true (kleiner dan)
2 <= 2 // true (kleiner of gelijk)
3 > 2 // true (groter dan)
2 >= 2 // true (groter of gelijk)
Logische operatoren
true && true // true (AND)
true && false // false
false || true // true (OR)
false || false // false
!true // false (NOT)
!false // true
Short-circuit evaluatie
Logische operatoren evalueren "short-circuit": bij && wordt de rechterkant niet geëvalueerd als de linkerkant false is, bij || niet als de linkerkant true is.
// Safe: als count 0 is, wordt er niet gedeeld
count > 0 && (done / count > 0.5)
Truthiness
In conditionele contexten worden waarden als volgt geïnterpreteerd:
| Waarde | Truthy/Falsy |
|---|---|
true | truthy |
false | falsy |
null | falsy |
0 | falsy |
| andere getallen | truthy |
"" (lege string) | falsy |
| andere strings | truthy |
lege array [] | falsy |
| niet-lege array | truthy |
| Entity | truthy |
Date
Datums in ISO 8601 formaat (YYYY-MM-DD).
2024-06-15
2025-01-01
1990-12-31
Built-in datum
today // Huidige datum
Datumrekenen
date1 - date2 // Verschil in dagen (Number)
2024-06-20 - 2024-06-15 // 5
date.add_days(10) // 10 dagen later
date.add_weeks(2) // 2 weken later
date.add_months(1) // 1 maand later
Date methodes
| Methode | Voorbeeld | Resultaat | Beschrijving |
|---|---|---|---|
days_until() | 2024-12-31.days_until() | 199 | Dagen tot (vanaf today) |
days_until(d) | date.days_until(other) | - | Dagen van date tot d |
days_since() | 2024-01-01.days_since() | 166 | Dagen sinds (vanaf today) |
days_since(d) | date.days_since(other) | - | Dagen van d tot date |
days_to(d) | date.days_to(other) | - | Dagen tot datum d |
add_days(n) | date.add_days(7) | - | n dagen optellen |
add_weeks(n) | date.add_weeks(2) | - | n weken optellen |
add_months(n) | date.add_months(1) | - | n maanden optellen |
year() | 2024-06-15.year() | 2024 | Jaartal |
month() | 2024-06-15.month() | 6 | Maand (1-12) |
day() | 2024-06-15.day() | 15 | Dag (1-31) |
weekday() | 2024-06-15.weekday() | 6 | Weekdag (1=ma, 7=zo) |
start_of_week() | date.start_of_week() | - | Maandag van de week |
start_of_month() | date.start_of_month() | - | Eerste van de maand |
end_of_month() | date.end_of_month() | - | Laatste van de maand |
format(p) | date.format("%d-%m-%Y") | "15-06-2024" | Formatteren |
Format patterns
Gebruik strftime-patronen voor format():
| Patroon | Betekenis | Voorbeeld |
|---|---|---|
%Y | Jaar (4 cijfers) | 2024 |
%m | Maand (2 cijfers) | 06 |
%d | Dag (2 cijfers) | 15 |
%B | Maandnaam | June |
%A | Dagnaam | Saturday |
Null
Vertegenwoordigt "geen waarde" of "onbekend".
null
Null handling
value ?? default // Geeft default als value null is
value ?? 0 // Geeft 0 als value null is
name ?? "Onbekend" // Geeft "Onbekend" als name null is
value?.property // Geeft null als value null is
owner?.name // Safe navigation
Null propagatie
Veel methodes propageren null automatisch:
null.upper() // null (geen error)
null.days_until() // null
Array
Een geordende lijst van waarden.
// Arrays ontstaan meestal uit relaties of filters
@actions // Array van actie-entities
@actions.budget // Array van getallen
@actions[status == "done"] // Gefilterde array
Array methodes
| Methode | Beschrijving |
|---|---|
count() | Aantal elementen |
is_empty() | Is de array leeg? |
first() | Eerste element (of null) |
last() | Laatste element (of null) |
nth(n) | Element op positie n (0-indexed) |
take(n) | Eerste n elementen |
skip(n) | Alles behalve eerste n |
reverse() | Omgekeerde volgorde |
sort() | Gesorteerd (oplopend) |
unique() | Zonder duplicaten |
flat() | Maak geneste arrays plat |
join(sep) | Voeg samen tot tekst |
Aggregatie methodes
| Methode | Beschrijving |
|---|---|
sum() | Som van alle getallen |
avg() | Gemiddelde |
min() | Minimum waarde |
max() | Maximum waarde |
median() | Mediaan |
span() | Max - min (voor datums: dagen) |
Auto-mapping
Property access en scalar methodes mappen automatisch over arrays:
@actions.budget // Array van alle budgets
@actions.budget.round() // Array van afgeronde budgets
@actions.name.upper() // Array van namen in hoofdletters
Entity
Gestructureerde objecten zoals Actions, Results, Directions.
// Entities hebben velden en relaties
action.name // Veld
action.budget // Veld
action.owner // Relatie naar Person
Entity types
| Type | Beschrijving |
|---|---|
| Action | Een actie/taak |
| Result | Een resultaat/doel |
| Direction | Een richting in het plan |
| DimensionValue | Een waarde van een dimensie |
| Person | Een persoon/gebruiker |
Velden benaderen
action.name // Direct veld
action.status // Direct veld
action?.name // Safe navigation (null als action null is)
Relaties benaderen
result.actions // Alle acties van dit resultaat
action.owner // De eigenaar (Person)