4.09) Schalter

Mit einem Schalter kann, abhängig von einem Objekt, ein bestimmter Block ausgeführt oder ein bestimmter Wert zugewiesen werden.

Ein einfacher Schalter

Für einen einfachen Schalter nutzen wir das Objekt "Switch" und die ".case"-Funktionen.

Switch( 3 )
.case( 1 )
"EINS".print
.case( 2 )
"ZWEI".print
.case( 3 )
"DREI".print
.case( 4 )
"VIER".print

Hier erzeugen wir einen "Switch" mit dem Parameter "3". Nun durchlaufen wir alle Case-Zeilen, bis wir auf eine Zeile treffen, wo Objekt und Parameter zusammen passen. In diesem Fall also: 3 == 3
Dann wird der zugehörige Block ausgeführt und die weitere Verarbeitung unterbrochen.

Die Case-Funktion arbeitet hier wie folgt:

  1. Objekt annehmen und mit dem Parameter-Wert vergleichen
  2. Ist der Wert identisch, wird der Block ausgeführt, der letzte Wert vom Block zurückgegeben und die weitere Verarbeitung im Stream unterbrochen.
  3. Falls der Parameter nicht passt, wird das Objekt an den Stream übergeben.

Da bei ".case" der letzte Wert vom Block zurückgegeben wird, ist nun auch folgendes möglich:

abc = Switch( 'b' )
.case( 'a' )
% = "A1"
.case( 'b' )
% = "B2"
.case( 'c' )
% = "C3"

Hier wollen wir der Variable "abc" einen Wert zuweisen, der von einem anderen Wert (in dem Fall 'b') abhängt.
Nun läuft dieses Objekt als durch die Case-Zeilen, passt natürlich beim zweiten Case und der zugehörige Block wird ausgeführt. Hier verändern wir den Wert des Blocks und setzen unseren gewünschten String (Dies wird im nächsten Kapitel genauer erklärt).
Dieser letzte Wert wird dann zurückgegeben und der weitere Stream unterbrochen. Somit ist "B2" das Ergebnis der Verarbeitung und wird der Variable "abc" zugewiesen.

Default

Falls keiner der vorherigen Fälle zutrifft, wird generell das ursprüngliche Objekt zurückgegeben. Nun können wir aber auch mit ".default" einen Standard-Block ausführen bzw. einen Standard-Wert zurückgeben:

name = "Felix"

Switch(name)
.caseIf( "Heinz" )
"Hallo Heinz!".print
.caseIf( "Josef" )
"Servus Sepp!".print
.default
"Ich grüße Dich!".print

CaseIf

Effektiv ist ".case" ein Alias zu ".caseIs" (Fall: Ist). Alternativ gibt es noch ".caseIf" (Fall: Wenn).
Hier wird der Parameter auf "true" geprüft. ist dies der Fall wird der Block ausgeführt, das letzte Block-Objekt zurückgegeben und der Stream unterbrochen.

Switch( 3 )
.caseIf( $ < 0 ) "Zu klein".print .caseIf( $ > 9 )
"Zu groß".print .caseIf( $ == 5 ) "Ist Fünf".print .default %.begin("Der Wert ist: ").print

Mit dem Dollarzeichen "$" kann auf den Wert zugegriffen werden, mit dem die Funktion ausgeführt wurde (hier: "3").
In diesem Fall passt keiner der "caseIf"-Fälle, weshalb der Default-Block ausgeführt wird.