В этой статье рассматривается только декларативный синтаксис.
Оператор ветвления
Принятый в Канторе оператор ветвления считается уже классическим:if условие then ветвь; elsif условие then ветвь; elsif условие then ветвь; else ветвь; end;Ветви elsif и else могут отсутствовать, завершающий end обязателен.
Оператор if может использоваться в форме выражения — тогда вместо ветвей стоят одиночные выражения или кортежи, соответствующие возвращаемым значениям, а точка с запятой внутри ветвей не ставится:
a, b = if условие then выражение_a, выражение_b elsif условие then выражение_a, выражение_b elsif условие then выражение_a, выражение_b else выражение_a, выражение_b end;В таком виде оператор if ближе всего к case when из SQL.
После исключения elsif из синтаксиса ключевое слово elsif в коде больше не подсвечивается.
Оператор выбора
Отличительная особенность оператора case в Канторе — наличие пролога:case выражение1, выражение2 of пролог; when значение1, значение2 then ветвь; when значение1, значение2 then ветвь; else ветвь; end;Условием выбора может быть кортеж, то есть несколько выражений, как ключ в БД. Работает оператор следующим образом:
- Выражения case вычисляются один раз.
- Если значения совпадают с одним из when, выполняется пролог и эта ветвь.
- Если значения ни с одним when не совпадают, выполняется только блок else, без пролога.
Имеется и выражение case:
a, b = case выражение1, выражение2, выражение3 [of] when значение1, значение2, значение3 then значение_a, значение_b when значение1, значение2, значение3 then значение_a, значение_b else значение_a, значение_b end;В выражении case пролог отсутствует, поэтому of не обязателен. Точка с запятой внутри ветвей также не ставится. Из-за поддержки кортежей выражением case удобно расписывать таблицы трансляции или подстановки значений.
Ключевые слова when и then введены в case ради кортежей и единообразия: ветви сложных операторов должны начинаться ключевым словом, иначе и синтаксис неоднозначен, и глазу не за что зацепиться. Двоеточие зарезервировано в языке для других целей.
Выражение как строчный оператор
Выражения if и case относятся к разновидности строчных операторов в терминах языка Кантор, обладая следующими признаками:- Содержат в ветвях только выражения или кортежи, поэтому могут встраиваться в другие выражения и кортежи подходящего типа.
- Не имеют побочных эффектов — являются чистыми.
- Не содержат внутри себя разделителя «точка с запятой» — общий признак всех строчных операторов.
Э-э-э. А зачем нужен пролог?
ОтветитьУдалить