↑  ←  Описание ключевого слова


Switch...Case...EndSwitch

Сравнивает одно значение с множеством значений и выполняет соответствующий блок.

Switch <expression>
    Case <value> [To <value>] [,<value> [To <value>] ...]
        <statements_1>
    [Case <value> [To <value>] [,<value> [To <value>] ...]
        <statements_n>]
    [Case Else
        <else_statements>]
EndSwitch

Параметры

<expression> Значение или выражение, возвращающее значение. Далее это значение сравнивается со значением(ями) или диапазоном значений в каждом Case до тех пор, пока не будет найдено совпадение. Это выражение вычисляется только один раз.
<value> To <value> Если значение выражения <expression> находится между двумя указанными значениями, то выполняется принадлежащий ему блок Case.
<value> Если значение выражения <expression> равно указанному значению <value>, то выполняется принадлежащий ему блок Case. Значение <value> может быть выражением.
<statements> Многострочный блок операторов, который выполняется, если связанное с ним выражение соответствует <expression>

Примечания

Если совпадают более, чем одно из выражений Case, то выполнится только первый блок, без сравнения последующих выражений Case.

Если не найдено совпадение, тогда выполняется секция Case Else, если она есть. Если совпадений нет и Case Else отсутствует, в конструкции Switch, то не будет выполняться никакой код (кроме выражений для проверки)

Конструкции Switch могут быть вложенными. Сравнение происходит без учёта регистра.

См. также

If...Then, If...Else...EndIf, Select...EndSelect, ContinueCase

Пример

Switch @HOUR
    Case 6 To 11
        $sMsg = "Доброе утро"
    Case 12 To 17
        $sMsg = "Добрый день"
    Case 18 To 21
        $sMsg = "Добрый вечер"
    Case Else
        $sMsg = "Вы всё ещё занимаетесь программированием в такой поздний час?"
EndSwitch

MsgBox(4096, Default, $sMsg)


; перечисление и диапазон, а также функция или иное выражение в условии
$b = 'К'
Switch Asc($b)
    Case 48 To 57
        $sMsg = "$b является числом"
    Case 65 To 90, 97 To 122, 168, 184, 192 To 255
        $sMsg = "$b является буквой"
    Case Else
        $sMsg = "$b не является числом или буквой"
EndSwitch

MsgBox(4096, "$b = " & $b, $sMsg)


; инверсный вариант - сравнение с постоянной величиной
Local $a = 3, $b = 1, $c = 1
Switch 1
    Case $a
        $sMsg = "a=1"
    Case $b
        $sMsg = "b=1"
    Case $c
        $sMsg = "c=1"
    Case Else
        $sMsg = "Ни один"
EndSwitch

MsgBox(4096, Default, $sMsg)