> ## Documentation Index
> Fetch the complete documentation index at: https://dokumentation.websale.de/llms.txt
> Use this file to discover all available pages before exploring further.

# Datentypen

> Basisdatentypen der WEBSALE Template-Sprache: String, Zahl, Bool, Listen und Maps korrekt notieren und im Template sicher verarbeiten.

Man unterscheidet folgende Basisdatentypen:

## String

Ein String ist eine Zeichenkette, d. h. eine Folge von Zeichen (z. B. Buchstaben, Ziffern, Sonderzeichen und Steuerzeichen). Strings müssen immer zwischen zwei Hochkommas oder Anführungszeichen notiert werden.

|                                |                                        |
| ------------------------------ | -------------------------------------- |
| `"Wert1, Wert2, Wert3, Wert4"` | String                                 |
| `'Wert1, Wert2, Wert3, Wert4'` | String                                 |
| `Wert1, Wert2, Wert3, Wert4`   | kein String (Anführungszeichen fehlen) |

## Konkatenation

Mit dem `+`-Operator ist es möglich mehrere Strings zusammenzustellen.

In diesem Beispiel erstellen wir Variablen für eine Begrüßung und stellen wir zusammen.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{{ var $greeting = "Willkommen " }}
{{ var $customer = "Neukunde"}}
{{ var $genericGreeting= $greeting + $customer}} 
{{= $genericGreeting}} // Wilkommen Neukunde
```

Nur Strings können konkateniert werden. Dennoch ist es möglich andere Variablen in ein String zu konvertieren um sie mit einem String zu konkatenieren.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{{ var $menge = 1}}
{{ var $text = "Anzahl: " + string($menge) + "!" }}
{{= $text}} // Anzahl: 1!
```

Es können andere Basistypen in String konvertiert werden:

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
Boolean: {{= string(true) }} // "true"
Integer: {{= string(1) }} // "1"
Float: {{= string(1.1) }} // "1.1"
```

## Integer

Integer sind Ganzzahlen (Zahlen ohne Nachkommastellen).

|         |                                           |
| ------- | ----------------------------------------- |
| `10`    | Integer                                   |
| `20.00` | kein Integer (Nachkommastellen vorhanden) |

## Float

Floats sind Fließkommazahlen mit einem **Punkt** als Dezimaltrenner.

|         |                                                         |
| ------- | ------------------------------------------------------- |
| `10.25` | Float                                                   |
| `10,25` | kein Float (ungültige Syntax: Komma als Dezimaltrenner) |

### Float konvertieren

Es können andere Basistypen in Float konvertiert werden

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
String: {{= float("1.1")}} // 1.1
Integer: {{= float(1) }} // 1.0
Boolean: {{= float(true) }} // 1.0
```

## Boolean/Bool (true/false)

Ein Bool ist ein Wahrheitswert und kann nur *true* (wahr) oder *false* (falsch) sein.

|          |                                             |
| -------- | ------------------------------------------- |
| `true`   | Wahrheitswert true                          |
| `false`  | Wahrheitswert false                         |
| `"true"` | kein Wahrheitswert (falsche Syntax: String) |

Boolesche Werte werden meistens in Kombination mit [Vergleichsoperatoren](/frontend/referenz/operatoren) erzeugt. Wenn man beispielsweise einen Wert mit einem anderen vergleicht, ist das Ergebnis entweder wahr oder falsch.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{{ if $quantity == 1 }}
    Wird angezeigt, wenn der Wert der Variable $quantity gleich 1 ist.
{{ /if }}
```

### truthy und falsy

Nicht nur Werte vom Datentyp Bool enthalten einen Wahrheitswert. Objekte aller anderen Datentypen haben ebenfalls eine Werte-Eigenschaft, die man als *truthy* oder *falsy* bezeichnet. In Zusammenhang mit logischen Operatoren und Verzweigungen ist es wichtig zu wissen, wann ein Wert als wahr oder falsch angesehen wird.

Hier eine Auflistung aller Werte die *falsy* sind und deshalb als *false* behandelt werden:

▪\_null\_, der Wert des Datentyps Null

▪\_false\_

▪die Zahl 0 (*Integer*) oder 0.0 (*Float*)

▪ein leerer *String " "*

▪eine leere *List \[ ]*

▪eine leere *Map* { }

Alle anderen Werte werden als *truthy* behandelt.

### Boolean konvertieren

Es können andere Basistypen in Boolean konvertiert werden

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
String: {{= bool(" ")}} // true
String: {{= bool("")}} // false
Integer: {{= bool(1) }} // true
Integer: {{= bool(0) }} // false
Float: {{= bool(1.0) }} // true
Float: {{= bool(0.0) }} // false
```

## List

Eine List ist eine Reihe von Werten, die kommasepariert zwischen eckigen Klammern stehen. Eine leere List wird mit eckigen Klammern ohne Inhalt geschrieben.

|             |               |
| ----------- | ------------- |
| `[1, 2, 3]` | gefüllte List |
| `[ ]`       | leere List    |

Die Leerzeichen zwischen den Werten sind optional.

## Distinct

Wenn in einer Liste mehrere Einträge gibt, die identisch sind, kann mit dieser Funktion alle doppelten Einträge entfernt werden.

**Argumente**

`list` - Liste, die verarbeitet werden soll

`key` - (Optional) Map-Key, der für den Vergleich mit anderen Maps hergenommen werden soll.

**Beispiel**

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{{ var $list = [ 1, 2, 3, 4, 3, 2, 5, 6, 1 ] }}
{{= distinct($list) }} // Ergebnis: [ 1, 2, 3, 4, 5, 6 ]
{{ $list = [ "a", 1, "b", true, 2, "a", true, true, {"x": 1, "y": 1}, {"x": 1, "y": 2} ] }}
{{= distinct($list) }} // Ergebnis: [ "a", 1, "b", true, 2, , {"x": 1, "y": 1}, {"x": 1, "y": 2} ]
```

Man kann bei für Objekte einen key angeben, mit dem definiert werden soll welches Feld zum Vergleich hergenommen werden soll.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{{ var $list = [ 1, {"x": 1, "y": 1}, {"x": 1, "y": 2}, {"x": 2, "y": 2} ] }}
{{= $list | distinct("x") }} // Ergebnis: [ 1, {"x": 1, "y": 1}, {"x": 2, "y": 2} ]

ähnliche Schreibweise ohne Pipe:
{{= distinct($list, "x") }}
```

## Merge

Es können zwei Listen jeweils miteinander vereint werden.

Zusätzliche Information: Neben der Verwendung von einer Funktion kann auch der `+`-Operator (`$list1 + $list2`) verwendet werden.

**Argumente**

`target` - Liste, die für das Zusammenführen als Basis hergenommen werden soll

`source` - Liste, um die das `target` erweitert werden soll

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{{ var $list1 = [ 1, 2, 3 ] }}
{{ var $list2 = [ 3, 4, 5] }}
{{ var $list3 = merge($list1, $list2) }}
{{= $list3 }} // Ergebnis: [1, 2, 3, 3, 4, 5]
```

## Map

Eine Map ist eine Liste von Schlüssel-Wert-Paaren, die innerhalb einfacher geschweifter Klammern geschrieben werden. Der Schlüssel und sein Wert werden durch Doppelpunkt getrennt. Die einzelnen Schlüssel-Wert-Paare werden durch Kommas getrennt. Eine leere Map wird mit geschweiften Klammern ohne Inhalt geschrieben.

|                                                              |                              |
| ------------------------------------------------------------ | ---------------------------- |
| `{ name: "Shirt", price: "12.95", image: "shirt-blue.jpg" }` | gefüllte Map                 |
| `{ "404": "Not found", "301": "Moved Permanently" }`         | gefüllte Map                 |
| `{ "Name, Description , Price, Zusatzinfos" }`               | keine Map (ungültige Syntax) |
| `{ }`                                                        | leere Map                    |

Wenn ein Schlüssel andere Zeichen enthält als Ziffern (0-9), Buchstaben (a-z, A-Z) oder Unterstriche (\_) oder mit einer Ziffer/Unterstrich beginnt, muss dieser als String in Anführungszeichen angegeben werden.

Bei der Ausgabe von Maps wird die Reihenfolge der einzelnen Schlüssel-Werte-Paare nicht berücksichtigt.

### **Merge**

Es können zwei Maps jeweils miteinander vereint werden. Bei der Map wird bei unterschiedlichen Inhalten der Inhalt des zweite Eintrags verwendet. Dabei kann auch verschachtelte Maps berücksichtigt werden.

**Argumente**

`target` - Map, die für das Zusammenführen als Basis hergenommen werden soll

`source` - Map, um die das `target` erweitert werden soll

`deep` - Optionaler Flag ob ein die Verschachtelung von Maps berücksichtigt werden soll (default: `false`)

Beispiel - Merge von zwei Maps.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{{ var $map1 = { "a": 1, "b": 2, "c": { "x": 10, "y": 11 } } }}
{{ var $map2 = { "a": 2, "c": { "z": 12 }, "d": true } }}
{{ var $map3 = merge($map1, $map2) }}
{{= $map3 }}  // Ergebnis: { "a": 2, "b": 2, "c":{ "z": 12 }, "d": true }
```

Beispiel - Deep Merge von zwei Maps:

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{{ var $map1 = { "a": 1, "b": 2, "c": { "x": 10, "y": 11 } } }}
{{ var $map2 = { "a": 2, "c": { "z": 12 }, "d": true } }}
{{ var $map3 = merge($map1, $map2, true) }}
{{= $map3 }}  // Ergebnis: { "a": 2, "b": 2, "c":{ "x": 10, "y": 11, "z": 12 }, "d": true }
```
