Bedingungsketten
Syntax
$value -> switch {
$condition1: $expr1;
...
$conditionN: $exprN;
default: $exprDefault;
}
switch ($value) {
$pattern1: $expr1;
...
$patternN: $exprN;
default: $exprDefault;
}
Beschreibung
Wenn ein Wert über mehrere Fallunterscheidungen bestimmt werden muss, führt die Verschachtelung von mehreren if-Bedingungen zu schwer lesbarem Script. Stattdessen kann eine Bedingungskette mit Hilfe von switch definiert werden.
Der Wert einer solchen Bedingungkette ist die Auswertung des ersten Ausdrucks exprX
, dessen Bedingung conditionX
zu true
auswertet. Wenn alle Bedingungen conditionX
zu false
auswerten, ist das Endergebnis die Auswertung von exprDefault
. Der Default-Zweig der Kette kann entfallen. In diesem Fall ist der Wert des Gesamtausdrucks null
, wenn alle Bedingungen zu false
auswerten.
Wenn alle Bedingungen aus einem Gleichheitstest bestehen, kann die Pattern-Schreibweise verwendet werden. In dieser Form wertet sich die Bedingungskette zu demjenigen Ausdruck exprX
mit kleinstem X
aus, dessen Pattern patternX
gleich dem Wert der Auswerung von value
ist.
Folgende Beispiele sind äquivalent:
x -> switch {
$x == 1: "one";
$x == 2: "a group";
$x >= 3: "a crowd";
default: "unknown";
}
x -> switch ($x) {
1: "one";
2: "two";
3: "three";
default: "unknown";
}
Parameter
Name | Typ | Beschreibung | Pflicht | Default |
---|---|---|---|---|
value | Zahl/Zeichenkette/Wahrheitswert/Fachobjekt/Menge | Ein Wert, der an die Funktion switch übergeben wird, um die Fallunterscheidungen vorzunehmen. |
ja | |
condition | Wahrheitswert | Eine Bedingung, die für value überprüft wird. |
Eins von beiden muss definiert sein. | |
pattern | Zahl/Zeichenkette/Wahrheitswert/Fachobjekt/Menge | Ein Pattern, das direkt mit der Auswertung von value verglichen wird. Kann die Schreibeweise für switch verkürzen, wenn dieses nur auf Gleichheit prüft. |
||
expr | Zahl/Zeichenkette/Wahrheitswert/Fachobjekt/Menge | Ein Ausdruck, der ausgewertet werden soll, wenn die dazugehörige condition bzw. pattern true ergibt. |
ja |
Rückgabewert
Typ: Zahl/Zeichenkette/Wahrheitswert/Fachobjekt/Menge
Die Auswertung der expr
, die bei der Fallunterscheidung ausgewählt wurde.
Beispiele
Pattern
(x -> switch {
$x == 1: "one";
$x == 2: "a group";
$x >= 3: "a crowd";
default: "unknown";
})(1)
Ausgabe: one
Conditions
(x -> switch {
$x < 12: "child";
$x < 18: "teen";
$x < 70: "adult";
default: "senior";
})(16)
Ausgabe: teen
Komplexere Datentypen
{
calendar = date(2021, 9, 7).toSystemCalendar();
mySwitch = x -> switch ($x) {
"add day": $calendar.withDayAdded(1).toDate();
"add month": $calendar.withMonthAdded(1).toDate();
"add year": $calendar.withYearAdded(1).toDate();
};
$mySwitch("add month");
}
Ausgabe: 07.11.2021