Spec-Zone.ru › Ada 95
Справочник по Ada 95

5.4 Операторы выбора

Оператор case_statement выбирает для выполнения одну из нескольких альтернативных sequences_of_statements; выбранная альтернатива определяется значением выражения.

Синтаксис

case_statement ::=
case expression is
case_statement_alternative
{case_statement_alternative}
end case;
case_statement_alternative ::=
when discrete_choice_list =>
sequence_of_statements

Правила разрешения имен

Ожидается, что выражение expression будет иметь дискретный тип. Ожидаемый тип для каждого discrete_choice — тип выражения expression.

Правила допустимости

Выражения expression и discrete_range, заданные как discrete_choice оператора case_statement, должны быть статическими. Ключевое слово others, если оно присутствует, должно использоваться отдельно и в последнем discrete_choice_list.
Возможные значения выражения expression должны быть покрыты следующим образом:
  • Если выражение expression является name (включая type_conversion или function_call) со статическим и ограниченным номинальным подтипом или является qualified_expression, подтип которого обозначает статический и ограниченный скалярный подтип, то каждый не others discrete_choice должен охватывать только значения в этом подтипе, а каждое значение этого подтипа должно быть покрыто каким-либо discrete_choice (явным образом или с помощью others).
  • Если тип выражения expression является root_integer, universal_integer или потомком формального скалярного типа, то оператор case_statement должен иметь others discrete_choice.
  • В противном случае каждое значение базового диапазона типа выражения expression должно быть покрыто (явным образом или с помощью others).
Два различных discrete_choice оператора case_statement не должны покрывать одно и то же значение.

Динамическая семантика

Для выполнения оператора case_statement выражение expression сначала вычисляется.
Если значение выражения expression покрывается discrete_choice_list некоторой альтернативы case_statement_alternative, выполняется последовательность операторов sequence_of_statements данной альтернативы.
В противном случае (значение не покрывается ни одной discrete_choice_list, возможно, из-за того, что оно выходит за пределы базового диапазона), возбуждается исключение Constraint_Error.
ПРИМЕЧАНИЯ
5 Выполнение оператора case_statement выбирает только одну альтернативу. Квалификация выражения оператора case_statement статическим подтипом часто позволяет ограничить число явно указанных вариантов.

Примеры

Примеры операторов case:
case Sensor is
when Elevation => Record_Elevation(Sensor_Value);
when Azimuth => Record_Azimuth (Sensor_Value);
when Distance => Record_Distance (Sensor_Value);
when others => null;
end case;
case Today is
when Mon => Compute_Initial_Balance;
when Fri => Compute_Closing_Balance;
when Tue .. Thu => Generate_Report(Today);
when Sat .. Sun => null;
end case;
case Bin_Number(Count) is
when 1 => Update_Bin(1);
when 2 => Update_Bin(2);
when 3 | 4 =>
Empty_Bin(1);
Empty_Bin(2);
when others => raise Error;
end case;


Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API