Автор rdc
Блок Select Case может рассматриваться как оптимизированный If-ElseIf и
работает так же. Стандартный Select Case можно использовать для любых
стандартных типов данных в <expression> , а специализированный формат Select
Case As Const оптимизирован для целочисленных значений.
Этот фрагмент кода показывает синтаксис стандартного select case. Expression
(выражение) — это переменная, которая может быть любым из стандартных типов
данных или отдельных элементов типа или массива.
Select Case <expression>
Case <list>
<statement>
<statement>
...
Case Else
<statement>
<statement>
...
End Select
<list> - положение оператора Case может быть любым из следующих
форматов.
Case <value>: значение, является
одним из поддерживаемых типов данных или перечисления.
Case <value> To <value>: определяет диапазон
значений.
Case Is <operator> <value>:
operator — любой из перечисленных логических операторов.
Case <value>, <value>, ...: список значений,
разделенных запятыми.
Case <variable>: переменная, содержащая значение.
В следующем фрагменте показано, как эти различные форматы могут быть
использованы в программе.
Case 47
Case 47 To 59
Case Is > 60
Case 47, 48, 53
Case keycode
Select Case As Const более быстрая версия Select заявления, работающая с integer
выражениями в диапазоне 0 - 4097.
Select Case As Const <integer_expression>
Case <list>
<statement>
<statement>
...
Case Else
<statement>
<statement>
...
End Select
<list> заявленный формат для Select Case As Const , ограниченный
значениями или перечислением значений. То есть, оператор выражения не
допускаются в пределах Case As Const.
Когда блок Case выполняется, следующие
инструкции после ключевого слова Case
до следующего Case (или End Select) будут выполнены. В любой момент времени
, только один блок
Case может быть выполнен. Если
Case Else присутствует и <expression> не соответствует ни одному Case,
тогда будут выполняться инструкции после Case else.
Следующая программа иллюстрирует использование блоков оператора Select Case.
'Ascii код клавиши
Dim As Integer keycode
'Цикл работает пока не нажата клавиша esc
Do
keycode = Asc(Inkey)
Select Case As Const keycode
Case 48 To 57
Print "You pressed a number key."
Case 65 To 90
Print "You pressed an upper case letter key."
Case 97 To 122
Print "You pressed a lower case key."
End Select
Sleep 1
Loop Until keycode = 27 '27 - ascii код
для Escape
End
В программе при нажатии клавиши, значение переводится
в
число, используя функцию Asc. Поскольку всегда будет целое значение,
которое является менее 4097 (с диапазон
ом символов
ascii код
ов от 0 до 255), используется Select Case As
Const формат.
Компилятор будет проверять значение keycode в диапазон
е
значений,
для того, чтобы определить
какой блок
нужно выполнить. Если keycode
попадает в предел
ы
определенного диапазона, буд
ет выполнять
ся
соответствующая инструкци
я
Print, и
далее поток программы продолжится со
следующей строки после End Select. Если keycode не соответствует
ни одному из предложенных диапазонов, то программа
будет продолжать
ся со
следующей строк
и после End Select.
Select Case
может легко транслироваться в If-Elseif.
Чтобы проиллюстрировать это, предыдущ
ую программ
у
мы перепишем с помощью If-ElseIf.
'Ascii код клавиши
Dim As Integer keycode
'Цикл работает
пока не нажата клавиша esc
Do
keycode = Asc(Inkey)
If (keycode >= 48) And (keycode <= 57) Then
Print "You pressed a number key."
ElseIf (keycode >= 65) And (keycode <= 90) Then
Print "You pressed an upper case letter key."
ElseIf (keycode >= 97) And (keycode <= 122) Then
Print "You pressed a lower case key."
End If
Sleep 1
Loop Until keycode = 27 '27 - ascii код
для Escape
End
Если вы сравните две программы, вы можете увидеть, что логика очень похож
а,
однако
использование Select Case является гораздо
более читаемым и понятным, чем If-ElseIf.