# Switch [v1.1.31+]

Executes one case from a list of mutually exclusive candidates.

    Switch SwitchValue
    {
    Case CaseValue1:
        Statements1
    Case CaseValue2a, CaseValue2b:
        Statements2
    Default:
        Statements3
    }

## Remarks

If present, SwitchValue is evaluated once and compared to each case value until a match is found, and then that case is executed. Otherwise, the first case which evaluates to true (non-zero and non-empty) is executed. If there is no matching case and a `Default` is present, it is executed.

StringCaseSense controls the case-sensitivity of string comparisons performed by Switch.

Each case may list up to 20 values. Each value must be an expression, but can be a simple one such as a literal number, quoted string or variable. `Case` and `Default` must be terminated with a colon `:`.

The first statement of each case may be below `Case` or on the same line, following the colon. Each case implicitly ends at the next `Case`/`Default` or the closing brace. Unlike the switch statement found in some other languages, there is no implicit fall-through and Break is not used (except to break out of an enclosing loop).

As all cases are enclosed in the same block, a label defined in one case can be the target of Goto from another case. However, if a label is placed immediately above `Case` or `Default`, it targets the end of the previous case, not the beginning of the next one.

`Default` is not required to be listed last.

## Related

If (expression), Else, Blocks

## Examples

#1: This is a working hotkey example. There is a functionally equivalent example using if-else-if in the documentation for the Input command.

    ~[::
    Input, UserInput, V T5 L4 C, {enter}.{esc}{tab}, btw,otoh,fl,ahk,ca
    switch ErrorLevel
    {
    case "Max":
        MsgBox, You entered "%UserInput%", which is the maximum length of text.
        return
    case "Timeout":
        MsgBox, You entered "%UserInput%" at which time the input timed out.
        return
    case "NewInput":
        return
    default:
        if InStr(ErrorLevel, "EndKey:")
        {
            MsgBox, You entered "%UserInput%" and terminated the input with %ErrorLevel%.
            return
        }
    }
    switch UserInput
    {
    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