11.6 Switch-Case-Anweisung

 
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.


Navigation zeigen