Switch <ex1> Case <ex2>[:] <blk> [...] [Default[:] <blk>] EndSwitch |
Die Switch
-Anweisung kann verwendet werden, um den Ausdruck ex1
mit allen anderen Ausdrücken nach Case
zu vergleichen. Sie
können so viele Case
-Anweisungen verwenden, wie Sie wollen,
aber es muss mindestens eine in Ihrer Switch
-Anweisung vorhanden
sein. Wenn der Ausdruck ex1
mit einem ex2
übereinstimmt,
wird der Code nach dieser Case
-Anweisung ausgeführt. Nach
der Ausführung setzt Hollywood Ihr Programm nach der EndSwitch
-Anweisung
fort. Wenn keiner der ex2
Ausdrücke mit ex1
übereinstimmt,
wird der Code nach der Default
-Anweisung ausgeführt. Die
Verwendung von der Default
-Anweisung ist optional. Wenn
Sie sie nicht brauchen, müssen Sie sie auch nicht benutzen.
Aber wenn Sie sie benutzen, muss sie immer die letzte Anweisung
des Switch
-Blockes sein. Nach der Default-
dürfen keine
weiteren Case
-Anweisungen folgen. Der Doppelpunkt nach Case
oder Default
ist auch optional.
Bitte beachten Sie, dass der Ausdruck ex2
und folgende immer konstant sein
müssen. Sie können hier nicht Variablen oder Rückgabewerte von Funktionen/Befehlen
verwenden. Auch dürfen Sie nicht Variablentypen in dieser Anweisung mischen: Wenn ex1
eine Zeichenkette ist, müssen auch alle ex2
und folgende Ausdrücke Zeichenketten
sein. Wenn eine Zahl verwendet wird, müssen alle anderen Ausdrücke auch Zahlen
sein.
Ein Beispiel:
Switch x Case 1: DebugPrint("x = 1") Case 2: DebugPrint("x = 2") Default: DebugPrint("x <> 1 And x <> 2") EndSwitch |
Der obige Code schaut auf die Variable x
und tritt in die erste Case
-Anweisung
ein, wenn x
eins ist. In die zweite Case
-Anweisung wird eingetreten, wenn x
2
enthält. Andernfalls wird die Default
-Anweisung ausgeführt.
Jede Anweisung Switch-Case
kann auch als normale If-Anweisung geschrieben werden.
Das Beispiel von oben würde dann wie folgt aussehen:
If x = 1 DebugPrint("x = 1") ElseIf x = 2 DebugPrint("x = 2") Else DebugPrint("x <> 1 And x <> 2") EndIf |
C und Java-Programmierer sollten beachten, dass die Switch
-Anweisung
in Hollywood nach dem Ende des vorherigen Case
-Blocks nicht
automatisch in den nächsten Case
-Block durchfällt. Stattdessen
wird Hollywood automatisch zum Ende der Anweisung springen,
nachdem ein Case
-Block ausgeführt wurde. Somit müssen Sie
am Ende eines Case
-Blocks auch nicht die Break-Anweisung
verwenden. Aber Sie können sie früher verwenden, um die Switch
-Anweisung
zu beenden.
Es ist jedoch möglich, manuell ein Durchfallen mit der Anweisung
FallThrough
zu erzwingen. Wenn Hollywood diese Anweisung in
einem Case
-Block begegnet, wird bis zum nächsten Case-
(oder
dem Default
-Block) fallen, d.h. es wird direkt in diesen Block
gesprungen. Daher kann FallThrough
nur verwendet werden, wenn
ein Case-
oder Default
-Block folgt. Andernfalls wird ein
Fehler erzeugt. Da die Default
-Anweisung immer der letzte
Block einer Switch
-Anweisung sein muss, ist es nicht erlaubt,
FallThrough
im Default
-Block zu verwenden.
Hier ein Beispiel:
Switch msg.action Case "OnKeyDown": FallThrough Case "OnKeyUp": DebugPrint("Key event:", msg.key) Default: DebugPrint("Other event") EndSwitch |
Der obige Code gibt die Taste aus, welche gedrückt wurde, falls
msg.action
OnKeyDown
oder OnKeyUp
beinhaltet. Wenn msg.action
OnKeyDown
ist, wird die Anweisung FallThrough
verwendet, um
in den OnKeyUp
-Block zu springen.
Alternativ kann die Anweisung FallThrough
auch direkt nach
der Anweisung Switch
eingefügt werden. In diesem Fall wird
jeder Case
-Block automatisch zum nächsten Block weitergeleitet,
es sei denn, es gibt eine Break-Anweisung,
die das Durchfallen verbietet.
Hier ist ein Beispiel:
Switch msg.action FallThrough Case "OnKeyDown": Case "OnKeyUp": DebugPrint("Key event:", msg.key) Break Case "OnMouseDown": Case "OnMouseUp": DebugPrint("Left mouse event") Break Case "OnRightMouseDown": Case "OnRightMouseUp": DebugPrint("Right mouse event") Break Default: DebugPrint("Other event") EndSwitch |
Der obige Code verwendet FallThrough
global, um denselben Code
für OnKeyDown
, OnKeyUp
, OnMouseDown
, OnMouseUp
, OnRightMouseDown
und OnRightMouseUp
zu verwenden. Die Break-Anweisungen
sind notwendig, da sonst Hollywood bis zur letzten Codezeile im Default
-Block
durchgehen würde.