Prev | Up | Next | Back | Forward
TOC -- / --.-- / --.--.-- | Index | Search | Syntax | Help


5.4 Case Statements

(1)
A case_statement selects for execution one of a number of alternative sequences_of_statements; the chosen alternative is defined by the value of an expression.
Syntax
(2)
       case_statement ::=
          case expression is
              case_statement_alternative
             {case_statement_alternative}
          end case;
(3)
       case_statement_alternative ::=
          when discrete_choice_list =>
             sequence_of_statements
Name Resolution Rules
(4)
The expression is expected to be of any discrete type. The expected type for each discrete_choice is the type of the expression.
Legality Rules
(5)
The expressions and discrete_ranges given as discrete_choices of a case_statement shall be static. A discrete_choice others, if present, shall appear alone and in the last discrete_choice_list.
(6)
The possible values of the expression shall be covered as follows:
(7)
(8)
(9)
(10)
Two distinct discrete_choices of a case_statement shall not cover the same value.
Dynamic Semantics
(11)
For the execution of a case_statement the expression is first evaluated.
(12)
If the value of the expression is covered by the discrete_choice_list of some case_statement_alternative, then the sequence_of_statements of the _alternative is executed.
(13)
Otherwise (the value is not covered by any discrete_choice_list, perhaps due to being outside the base range), Constraint_Error is raised.

(14)
Examples
(15)
Examples of case statements:
(16)
       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;
(17)
       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;
(18)
       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;


Prev | Up | Next | Back | Forward
TOC -- / --.-- / --.--.-- | Index | Search | Syntax | Help

Ada WWW Home -- Email comments, additions, corrections, gripes, kudos, etc. to:

Magnus Kempe -- Magnus.Kempe@di.epfl.ch
Copyright statement
Page last generated: 95-03-12