Select Case выполняет определенный код в зависимости от значения
выражения. Выражение вычисляется один раз и сравнивается с каждой
Case
по порядку, пока не будет найдено соответствующее выражение. Выполняется код
внутри соответствующего
Case, и программа
пропускает все остальные
Case вплоть до конца
блока
Select Case. Выражение
Case Else
является условием по умолчанию, когда ни один
Case
не сопоставлен. Так что, если есть
Case Else, то это
гарантирует что хотя бы один блок выполнится. Если ни один
Case
не совпадает, то будет пропущен весь блок
Select Case.
End Select используется для закрытия блока
Select Case...End Select.
Примечание для пользователей C: В FreeBASIC,
Select Case
работает как блок
switch , где все условия имеют оператор
break
в конце. Так же многократные варианты могут быть помещены в список выражения
на одном
Case.
Помимо типов
integer, типы с плавающей запятой и
выражения последовательности поддерживаются в первом синтаксисе.
Синтаксис списка выражения:
{ expression | expression To expression | Is relational operator expression }[, ...]
- expr: оценивается expr, и сравнивается
на равенство с исходным выражением. Если они равны, то совпадение найдено.
Это может рассматриваться как сокращение для "Is = expr" (см.
ниже).
- expr1 To expr2: оценивается expr1
и проверяется его на предмет меньше или равно исходному выражению. Если это так,
он оценивает expr2, и проверяет его на предмет больше или равно
исходному выражению. Если это так, то совпадение было найдено.
- Is реляционный_оператор expr: оценивается expr,
и сравнивает исходную операцию с помощью прилагаемого
реляционного_оператора (=, >, <, <>, <=, >=).
Если сравнение имеет значение true, то найдено совпадение.
Несколько проверок могут быть сделаны в каждом
Case, разделяя их запятой (
,).
Как только совпадение было найдено, программа заканчивает свою проверку и
идет на выполнение инструкций кода для этого блока
Case.
Никакие дальнейшие выражения не вычисляются и не проверяются.
Пример списка выражений:
Case 1 | константа |
Case 5.4 To 10.1 |
диапазон |
Case Is > 3 | больше, чем 3 |
Case 1, 3, 5, 7 to 9 |
набор значений |
Case x | значение переменной |
Если
As Const используется, только
integer константы (все числовые константы исключая константы с
плавающей точкой:
single и
double) могут быть оценены , а список выражений поддерживает только
простые константы и перечисления. "
To" для диапазонов
поддерживается, но "
Is" не поддерживается.
С использованием
As Const, таблица переходов создается,
чтобы содержать полный спектр
integer хендлов
Case.
Это позволяет
Select Case As Const работать быстрее чем
простому
Select Case. Тем не менее, размер диапазона
значений ограничен, и наибольшее значение в диапазоне может быть не больше,
чем наименьшее значение + 4096.
Dim choice As Integer
Input "Choose a number between 1 and 10: "; choice
Select Case As Const choice
Case 1
Print "number is 1"
Case 2
Print "number is 2"
Case 3, 4
Print "number is 3 or 4"
Case 5 To 10
Print "number is in the range of 5 to 10"
Case Else
Print "number is outside the 1-10 range"
End Select
'' SELECT CASE vs. SELECT CASE AS CONST быстрый тест
Const N = 50000000
Dim As Integer dummy = 0
Dim As Double t = Timer()
For i As Integer = 1 To N
Select Case i
Case 1, 3, 5, 7, 9
dummy += 1
Case 2, 4, 6, 8, 10
dummy += 1
Case 11 To 20
dummy += 1
Case 21 To 30
dummy += 1
Case 31
dummy += 1
Case 32
dummy += 1
Case 33
dummy += 1
Case Is >= 34
dummy += 1
Case Else
Print "can't happen"
End Select
Next
Print Using "SELECT CASE: ##.### seconds"; Timer() - t
t = Timer()
For i As Integer = 1 To N
Select Case As Const i
Case 1, 3, 5, 7, 9
dummy += 1
Case 2, 4, 6, 8, 10
dummy += 1
Case 11 To 20
dummy += 1
Case 21 To 30
dummy += 1
Case 31
dummy += 1
Case 32
dummy += 1
Case 33
dummy += 1
Case Else
If( i >= 34 ) Then
dummy += 1
Else
Print "can't happen"
End If
End Select
Next
Print Using "SELECT CASE AS CONST: ##.### seconds"; Timer() - t
Sleep
См. также