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.