Функция Case |
При работе вычисляется условие, затем последовательно вычисляются значения границ диапазонов меток и значение условия проверяется на соответствие составным меткам. Возвращаемый тип выраженний - границ диапазонов меток приводится к возвращаемому значению условия. Если это невозможно выдается сообщение об ошибке. Условие соответствует метке если его значение оказывается в одном из перечисленных в метке диапазонов. Значение проверяется на "больше или равно левой границы" и на "меньше или равно правой границы". Если правая граница не указана происходит проверка на равенство. Если условие соответствует метке, вычисляется соответствующие выражение, дальнейшее выполнение прекращается. Если соответствия ни с одной меткой не найдено вычисляется выражение else. Возвращаемые значения всех операторов, в том числе оператора else приводятся к общему типу. Если это невозможно выдается сообщение об ошибке.
Case "(" <условие> ";" <составная_метка> ":" <выражение> {"," <составная_метка> ":" <выражение>} [";" <выражение_else>] ")"
<условие> - вычисляемое выражение.
<составная_метка> ::= <диапазон> [','<диапазон>]
<диапазон> ::= <левая_граница> [".." <правая_граница>]
<левая_граница> - вычисляемое выражение.
<правая_граница> - вычисляемое выражение.
<выражение> - вычисляемое выражение.
<выражение_else> - вычисляемое выражение. Если выражение else не задано, то по умолчанию генерируется выражение, возвращающее нулевое значение, тип которого совпадает с типом возвращаемого значения остальных операторов. Например для строки - пустая строка, для числа - 0 и т.д.
Результат вычисления выражения, для которого составная метка соответствует условию. Если соответствия ни с одной меткой не найдено вычисляется выражение else.
interface exprCase; function a(i : word) : string; { a := Case(i; 0 : 'I = 0', 1,2 : 'I = 1,2', 3..6,8 : 'I = 3..6'; 'ELSE'); } handleEvent cmInit : { Message ('Передаю 0'); Message (a(0)); Message ('Передаю 2'); Message (a(2)); Message ('Передаю 5'); Message (a(5)); Message ('Передаю 7'); Message (a(7)); } end; end.
Атлантис 5.0.03.