Раздел 5.2 - Инструкция Case

Иногда необходимо выполнить одну из нескольких различных последовательностей инструкций, в зависимости от значения некоторого выражения. Это можно сделать, используя набор выражений "elsif", однако большинство языков (и Ada в том числе) предоставляют более простой способ реализации этого.

В Ada таким механизмом является инструкция case. Эта инструкция сначала вычисляет значение выражения, а затем, сравнивая его со списком значений, определяет, что выполнять дальше. Ниже приведен пример:

  case A is                      -- выполнение действий в зависимости от значения A:
    when 1          => Fly;      -- если A=1, выполнить Fly.
    when 3 .. 10    => Put(A);   -- если A от 3 до 10, вывод значения А на экран.
    when 11 | 14    => null;     -- если A равно 11 или 14, ничего не делать.
    when 2 | 20..30 => Swim;     -- если A равно 2 или от 20 до 30, выполнить Swim.
    when others     => Complain; -- если A имеет другое значение, выполнить Complain.
  end case;

Заметим, что после каждого "when" следует список одного или нескольких возможных значений. Спецификатор "when others" является указанием на все значения, которые не приведены ни в одном из списков. Оператор case осуществляет выбор одной, и только одной альтернативы; все варианты должны быть исчерпывающими (охватывать все возможные случаи) и уникальными ( не может быть двух выражений "when 5 =>"). Компилятор Ada определит наличие пропущенных или повторяющихся вариантов во время компиляции.

Далее приведена полная BNF инструкции case:

инструкция_case ::=
  "case" выражение "is"
      альтернатива
     {альтернатива}
  "end case;"

альтернатива ::=
   "when" список_дискретных_значений "=>" последовательность_инструкций

список_дискретных_значений ::= дискретное_значение { | дискретное_значение }

дискретное_значение ::= выражение | дискретный_диапазон | "others"

Инструкция case в Ada функционально идентична инструкции "switch" языка С. В отличие от С, Ada допускает диапазоны значений и не требует в конце каждой последовательности инструкции "break", являющейся источником частых ошибок в программах на С.

Инструкции case полезны, однако большое количество инструкций case может служить показателем того, что, скорее всего, необходимо применить объектно-ориентированный подход. Возможности объектно-ориентнированного программирования в Ada будут рассмотрены в следующих уроках.


Упражнение:

Если, в приведенном выше примере инструкции case, А равно 12, то что будет выпонено?

  1. Fly.
  2. Put(A).
  3. null (ничего).
  4. Swim.
  5. Complain.

Вы можете также:

PREVIOUS Перейти к предыдущему разделу

NEXT     Перейти к следующему разделу

OUTLINE  Вернуться к содержанию Урока 5

David A. Wheeler (dwheeler@ida.org)

Перевод: Юрий Королев   Общая редакция перевода: Г.Ю. Сисюк

Исходная копия этого документа находится по адресу "http://www.adahome.com/Tutorials/Lovelace/s5s2.htm".

Исходная копия перевода размещена на сайте http://www.ada-ru.org