End If
Использование операторов Select Case
Операторы If. . .ElseIf и вложенные If. . .Then идеально подходят для принятия решений на основе проверки некоторого числа разных выражений. Если же приходится проверять одно и то же значение, сравнивая с различными выражениями, то самым подходящим обычно оказывается оператор Select Case. Синтаксис этого оператора следующий:
Select Case значение
Case критерий!
(операторы, выполняемые, когда значение удовлетворяет критерий!)
Case критерий2
(операторы, выполняемые, когда значение удовлетворяет критерий2)
... ' дополнительные операторы Case
Case Else ' необязательный
(операторы, выполняемые, когда значение
не удовлетворяет ни одному из приведенных критериев)
End Select
Проверка условий в операторах Select Case
Структура Select Case не использует явным образом полные условные выражения, подобные тем, о которых шла речь выше (см. раздел "Курс на использование условных выражений"). Вы должны разбить каждое условие на две части, представленные как значение и критерийЫ в предыдущем разделе при описании синтаксической конструкции этой структуры. Например, если у нас есть условное выражение
а + b > с
то значение можно определить как часть выражения, находящуюся слева от знака операции сравнения (а + b), а все, что останется, включая знак операции, - это критерий N ( > с).
Пример оператора Select Case
Здесь явно не помешает пример, показывающий, как в действительности может выглядеть структура Select Case.
Select Case objRol l OfFi l m.Type
Case "Слайдовая"
intСлайдовые = intСлайдовые + 1
Case "Цветная негативная"
intЦветныеНегативные = intЦветныеНегативные + 1
Case "ЧБ негативная"
intЧБнегативные = intЧБнегативные + 1
.Case Else
MgaBox "Неизвестный тип пленки."
End Select
В основном этот фрагмент программного кода делает то же, что и приведенный выше программный код для примера из раздела об операторах If. . .ElseIf (опущена только проверка срока хранения). Правда, с тех пор наш гипотетический объект, представляющий ролик пленки, похоже, был немного модифицирован - информация о цветностибесцветности пленки теперь тоже представляется свойством Туре, а не отдельным свойством Color, как раньше.
А если дело обстоит таким образом, то программе приходится работать только с одним значением - со значением, возвращаемым свойством Туре. - но сравнивается это значение с несколькими из допустимых. Так что Select Case - это как раз то, что для нашего случая доктор прописал.
Первое применение оператора Case в данном примере эквивалентно применению If objRollOf Film.Type = "Слайдовая" Then, т.е. если свойство Туре объекта равно "Слайдовая", то программа выполняет следующий оператор, в противном случае она перейдет ко второму оператору Case.
Заметьте, что знака операции, присутствие которого кажется на первый взгляд логичным, в критериях нет. Причина в том, что в операторах Select Case равенство в качестве операции сравнения просто подразумевается.
Если значение свойства Туре не будет удовлетворять ни одному из критериев в операторах Case, то управление перейдет к оператору Case Else, который всегда находится в самом конце структуры Select Case. В предыдущем примере результатом этого будет сообщение об ошибке "Неизвестный тип пленки". Оператор Case Else необязателен, поскольку вполне вероятно, что вас устроит отсутствие всякой реакции на неудовлетворение всех критериев. Как и в данном примере, обычно нет никакой необходимости использовать оператор Case Else, разве что для того, чтобы программист проинформировал самого себя о не предусмотренных им значениях, хранящихся в программе.
Дополнительные сведения об операторе Case
В предыдущем примере критерии, заданные в операторах Case, были просто цветочками, детскими вопросами типа "Равно ли свойство Туре тому-то и тому-то?" Но с помощью оператора Case вы можете задавать и значительно более сложные критерии.
Это проще всего показать на примере с числами. Предположим, ваш оператор Select Case открывается следующей строкой программного кода:
Select Case intВозрастПациента
В данном случае значением для сравнения будет переменная целого типа intВозрастПациента, представляющая возраст пациента клиники. В следующем списке представлено несколько типов сравнения, которые можно реализовать с помощью операторов Case, и приводятся соответствующие примеры.
Читать дальше