Führt eine Case-Anweisung aus einer Liste von Kandidaten aus, die sich gegenseitig ausschließen.
Switch SwitchWert { Case CaseWert1: Anweisungen1 Case CaseWert2a, CaseWert2b: Anweisungen2 Default: Anweisungen3 }
Sofern vorhanden, wird SwitchWert einmal ausgewertet und mit jedem Case-Wert verglichen. Wenn eine Übereinstimmung gefunden wurde, wird das entsprechende Case ausgeführt. Ansonsten wird das erste Case ausgeführt, das als True (weder 0 noch leer) gewertet wird. Wenn kein passendes Case gefunden wird, wird Default
ausgeführt, sofern vorhanden.
Es wird ein numerischer Vergleich durchgeführt, wenn sowohl SwitchWert als auch der Case-Wert Zahlen oder numerische Zeichenketten sind. Jeder Case-Wert wird separat behandelt und beeinflusst nicht den Vergleichstyp von anderen Case-Werten. [v1.1.36+]: Wenn einer der beiden Ausdrücke eine einzelne, in Anführungszeichen gesetzte Zeichenkette ist, wird der Vergleich nicht-numerisch durchgeführt. Zum Beispiel stimmt switch v:="00"
mit case "00":
oder case 0:
überein, aber nicht mit case "0":
.
StringCaseSense bestimmt die Groß-/Kleinschreibung-Sensitivität bei Zeichenkettenvergleiche via Switch.
Für jedes Case können bis zu 20 Werte angegeben werden. Jeder Wert muss ein Ausdruck sein, dazu zählen einfache Werte wie direkt geschriebene Nummern, in Anführungszeichen gesetzte Zeichenketten oder Variablen. Case
und Default
müssen mit einem Doppelpunkt :
enden.
Die erste Anweisung eines Case kann entweder unter oder neben dem Case
stehen. Jedes Case endet indirekt beim nächsten Case
/Default
oder bei der geschweiften Endklammer. Im Gegensatz zu den Switch-Anweisungen in einigen anderen Sprachen gibt es weder ein indirektes Fall-Through noch Break (außer um eine Schleife zu unterbrechen).
Da alles Cases im gleichen Block sind, kann ein Label, das in einem Case definiert wurde, das Ziel von Goto aus einem anderen Case sein. Wenn allerdings ein Label direkt über Case
oder Default
platziert wird, verweist es auf das Ende des vorherigen Case, nicht auf den Anfang des nächsten Case.
Default
muss nicht als letztes aufgelistet werden.
Dies ist ein funktionierendes Hotkey-Beispiel. Es gibt ein Beispiel auf der Input-Seite, das funktionsgemäß identisch ist, aber if-else-if verwendet.
~<:: Input, BenutzerEingabe, V T5 L4 C, {enter}.{esc}{tab}, btw,otoh,fl,ahk,ca switch ErrorLevel { case "Max": MsgBox, Ihre Eingabe "%BenutzerEingabe%" hat die maximale Textlänge erreicht. return case "Timeout": MsgBox, Sie haben "%BenutzerEingabe%" innerhalb der verfügbaren Zeit eingegeben. return case "NewInput": return default: if InStr(ErrorLevel, "EndKey:") { MsgBox, Sie haben "%BenutzerEingabe%" eingegeben und Eingabe mit %ErrorLevel% beendet. return } } switch BenutzerEingabe { case "btw": Send, {backspace 4}by the way case "otoh": Send, {backspace 5}on the other hand case "fl": Send, {backspace 3}Florida case "ca": Send, {backspace 3}California case "ahk": Run, https://www.autohotkey.com } return