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

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

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

Синтаксис

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

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

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

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

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

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

Для выполнения оператора case_statement выражение вычисляется в первую очередь.
Если значение выражения покрыто список_значений какой-либо альтернативы 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