Logo

28 ноября 2013 г.

Ветвление и выбор

В языке Кантор учитывается не только опыт Паскаля и Си, но и Ады с PL/SQL, что влияет на синтаксис. Влияние заметно в операторах if и case.

В этой статье рассматривается только декларативный синтаксис.

Оператор ветвления

Принятый в Канторе оператор ветвления считается уже классическим:
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, без пролога.
Наличие хотя бы одного when обязательно, иначе оператор вырождается if без условия, чего быть не может. Блок else может отсутствовать, завершающий end обязателен.

Имеется и выражение 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 относятся к разновидности строчных операторов в терминах языка Кантор, обладая следующими признаками:
  • Содержат в ветвях только выражения или кортежи, поэтому могут встраиваться в другие выражения и кортежи подходящего типа.
  • Не имеют побочных эффектов — являются чистыми.
  • Не содержат внутри себя разделителя «точка с запятой» — общий признак всех строчных операторов. 

Комментариев нет :

Отправить комментарий

Выбрав в выпадающем списке пункт «Имя/URL», можно оставить комментарий от своего имени без предварительной регистрации.