Книга: Основы объектно-ориентированного программирования
Множественный выбор
Множественный выбор
Инструкция множественного выбора (также известная, как инструкция Case) производит разбор вариантов, имеющих форму: e = vi , где e - выражение, а vi - константы то же типа. Хотя условная инструкция (if e = v1 then ...elseif e = v2 then...) работает, есть две причины, оправдывающие применение специальной инструкции, что является исключением из обычного правила: "если нотация дает хороший способ сделать что-то, нет необходимости вводить другой способ". Вот эти причины:
[x]. Разбор случаев настолько распространен, что заслуживает особого синтаксиса, увеличивающего ясность, позволяя избежать бесполезного повторения "e =".
[x]. Компиляторы могут использовать особенно эффективную технику реализации, - таблицу переходов (jump table), - неприменимую к общим условным инструкциям и избегающую явных проверок.
Что касается типа анализируемых величин (тип e и vi), то инструкции множественного выбора достаточно поддерживать только целые и булевы значения. Согласно правилу, они фактически должны объявляться либо все как INTEGER, либо как CHARACTER. Общая форма инструкции такова:
inspect
e
when v1 then
instruction; instruction; ...
when v2 then
instruction; instruction; ...
...
else
instruction; instruction; ...
end
Все значения vi должны быть различными; часть else факультативна; каждая из ветвей может иметь произвольное число инструкций или не иметь их.
Инструкция действует так: если значение e равно значению vi (это может быть только для одного из них), выполняются инструкции соответствующей ветви; иначе, выполняются инструкции в ветви else, если они есть.
Если отсутствует else, и значение e не соответствует ни одному vi, то возникает исключительная ситуация ("Некорректно проверяемое значение"). Это решение может вызвать удивление, поскольку соответствующая условная инструкция в этом случае ничего не делает. Но оно характеризует специфику инструкции множественного выбора. Когда вы пишете inspect с набором значений vi, нужно включить ветвь else, даже пустую, если вы понимаете, что во время выполнения значения e могут не соответствовать никаким vi. Если вы не включаете else, то это эквивалентно явному утверждению: "значение e всегда является одним из vi". Проверяя это утверждение и создавая исключительную ситуацию при его нарушении, реализация оказывает нам услугу. Бездействие в данной ситуации - означает ошибку - в любом случае, ее необходимо устранить как можно раньше.
Одно из частых приложений инструкции множественного выбора - анализ символа, введенного пользователем13.4):
inspect
first_input_letter
when 'D' then
"Удалить строку"
when 'I' then
"Вставить строку"
...
else
message ("Неопознанная команда; введите H для получения справки")
end
Когда значения vi целые, то они могут быть определены как уникальные (unique values), концепция которых рассмотрена в следующей лекции. Это делает возможным в объявлении определить несколько абстрактных констант, например, Do, Re, Mi, Fa, Sol, La, Si: INTEGER is unique, и затем анализировать их в инструкции: inspect note when Do then...when Re then...end.
Как и условные инструкции, инструкции множественного выбора не должны использоваться для замены неявного выбора, основанного на динамическом связывании.
- Использование операторов if для выбора вариантов
- Резюме: использование операторов if для организации выбора из нескольких вариантов
- 7. Выбор вариантов
- МНОЖЕСТВЕННЫЙ ВЫБОР: ОПЕРАТОРЫ switch И break
- Множественный выбор: конструкция else-if
- Множественный выбор при помощи switch
- Резюме: множественный выбор вариантов с помощью оператора switch
- Инструкции
- Создание (Creation)
- Условная Инструкция (Conditional)
- Проверка
- Повторение вычислений