Switch [v1.1.31+]

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
}

Bemerkungen

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.

If (Ausdruck), Else, Blöcke

Beispiele

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