Switch [v1.1.31+]

Vergleicht einen Wert mit mehreren Cases und führt die Anweisungen der ersten Übereinstimmung aus.

Switch SwitchWert
{
Case CaseWert1:
    Anweisungen1
Case CaseWert2a, CaseWert2b:
    Anweisungen2
Default:
    Anweisungen3
}

Parameter

SwitchWert

Wenn weggelassen, wird das erste Case ausgeführt, dessen Auswertung True (weder 0 noch leer) ergibt. Andernfalls wird SwitchWert einmal ausgewertet und mit jedem Case-Wert verglichen. Bei Übereinstimmung wird das entsprechende Case ausgeführt.

Wenn kein Case übereinstimmt, wird Default ausgeführt, falls vorhanden.

CaseWertN

Der zu prüfende oder zu vergleichende Wert, je nachdem, ob SwitchWert vorhanden ist.

Bemerkungen

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 anderer Case-Werte. [v1.1.36+]: Wenn einer der beiden Ausdrücke eine 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, ob bei Zeichenkettenvergleichen zwischen Groß- und Kleinschreibung unterschieden wird.

Für jedes Case können bis zu 20 Werte angegeben werden. Jeder Wert muss ein Ausdruck sein, aber es kann auch ein einfacher Ausdruck angegeben werden, z.B. eine direkt geschriebene Zahl, eine in Anführungszeichen gesetzte Zeichenkette oder eine Variable. 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 kein indirektes Fall-Through, außerdem wird kein Break verwendet (außer um eine umschließende Schleife zu unterbrechen).

Da sich alle Cases im selben Block befinden, kann ein Label, das in einem Case definiert ist, das Ziel von Goto in 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

Vergleicht eine Zahl mit mehreren Cases und zeigt das Mitteilungsfenster der ersten Übereinstimmung an.

switch 2
{
case 1: MsgBox keine Übereinstimmung
case 2: MsgBox Übereinstimmung
case 3: MsgBox keine Übereinstimmung
}

Der SwitchWert-Parameter kann weggelassen werden, um das erste Case auszuführen, dessen Auswertung True ergibt.

Zkette := "Franz jagt im komplett verwahrlosten Taxi quer durch Bayern."
switch
{
case InStr(Zkette, "Bus"): MsgBox false
case InStr(Zkette, "Taxi"): MsgBox true
case InStr(Zkette, "Bahn"): MsgBox false
}

Dies ist ein funktionierendes Hotkey-Beispiel. Die Dokumentation des Input-Befehls enthält ein funktionsgleiches Beispiel, das 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 die Eingabeerfassung 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