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