Ga naar hoofdinhoud

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

MethodeVoorbeeldResultaatBeschrijving
abs()(-5).abs()5Absolute waarde
round()3.7.round()4Afronden naar dichtstbijzijnde geheel
round(n)3.14159.round(2)3.14Afronden op n decimalen
floor()3.9.floor()3Naar beneden afronden
ceil()3.1.ceil()4Naar boven afronden
clamp(min, max)15.clamp(0, 10)10Beperk tot bereik
to_text()42.to_text()"42"Converteer naar tekst
format(p)3.14159.format("0.00")"3.14"Formatteren
Negatieve getallen

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

SequenceBetekenis
\"Dubbel aanhalingsteken
\\Backslash
\nNieuwe regel
\rCarriage return
\tTab

Text operaties

"hello" + " " + "world"    // "hello world" (concatenatie)

Text methodes

MethodeVoorbeeldResultaatBeschrijving
len()"hello".len()5Aantal tekens
upper()"hello".upper()"HELLO"Hoofdletters
lower()"WORLD".lower()"world"Kleine letters
trim()" hi ".trim()"hi"Verwijder witruimte
contains(s)"hello".contains("ell")trueBevat substring?
starts_with(s)"hello".starts_with("he")trueBegint met?
ends_with(s)"hello".ends_with("lo")trueEindigt 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()42Converteer naar getal
to_date()"2024-06-15".to_date()2024-06-15Converteer 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:

WaardeTruthy/Falsy
truetruthy
falsefalsy
nullfalsy
0falsy
andere getallentruthy
"" (lege string)falsy
andere stringstruthy
lege array []falsy
niet-lege arraytruthy
Entitytruthy

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

MethodeVoorbeeldResultaatBeschrijving
days_until()2024-12-31.days_until()199Dagen tot (vanaf today)
days_until(d)date.days_until(other)-Dagen van date tot d
days_since()2024-01-01.days_since()166Dagen 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()2024Jaartal
month()2024-06-15.month()6Maand (1-12)
day()2024-06-15.day()15Dag (1-31)
weekday()2024-06-15.weekday()6Weekdag (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():

PatroonBetekenisVoorbeeld
%YJaar (4 cijfers)2024
%mMaand (2 cijfers)06
%dDag (2 cijfers)15
%BMaandnaamJune
%ADagnaamSaturday

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

MethodeBeschrijving
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

MethodeBeschrijving
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

TypeBeschrijving
ActionEen actie/taak
ResultEen resultaat/doel
DirectionEen richting in het plan
DimensionValueEen waarde van een dimensie
PersonEen 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)