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

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

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

Синтаксис

case_statement ::=
case выражение_выбораexpression is
case_statement_alternative
{case_statement_alternative}
end case;
case_statement_alternative ::=
when список_выбора =>
последовательность_операторов

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

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

Правила легальности

Выражения выбора, указание_подтипа и диапазон (приведенные как выбор оператора case_statement) должны быть статическими. Выбор others, если он присутствует, должен стоять в последнем списке discrete_choice_list.
Возможные значения выражение_выбораexpression должны быть покрыты (см. 3.8.1) следующим образом:
  • Если выражение_выбораexpression — это имя (включая преобразование_типов, квалифицированное_выражение или вызов_функции) со статическим и ограниченным номинальным подтипом, то каждый не-others выбор должен покрывать только те значения в этом подтипе, которые удовлетворяют его предикатам (см. 3.2.4), и каждое значение этого подтипа, удовлетворяющее его предикатам, должно быть покрыто каким-либо выбором (явно или с помощью others).
  • Если тип выражение_выбораexpression — целое_корневое, универсальное_целое или наследник формального скалярного типа, то оператор case_statement должен иметь выбор others.
  • В противном случае каждое значение базового диапазона типа выражение_выбораexpression должно быть покрыто (явно или с помощью others).
Два различных выбора оператора case_statement не должны покрывать одно и то же значение.

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

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

Примеры

Примеры операторов выбора:
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