Решение языка Кантор — дать возможность записывать условия в виде блоков с отступом, разделяя отдельные предложения точкой с запятой. Поскольку на практике чаще всего используются связки and и or, блочные формы введены именно для них.
Блок all — блочный and
Для наглядности блочные условия рассматриваются на примере оператора if. Предположим, что у нас есть следующая функция:with var Core:Word screenWidth = 1280, screenHeight = 1024; do onScreenColor[Core:Integer x, y; Core:Word color] = if x >= 0 and x < screenWidth.AsInteger and y >= 0 and y < screenHeight.AsInteger then color else -1.RawWord end; end;Из-за строгости сравнения знаковых и беззнаковых целых условие получилось громоздким. Можно без всяких блоков записать его в две строчки, но в байт-коде они не сохранятся, и в будущем отекстовщик не будет знать, где поставить перевод строки.
Для преодоления этой проблемы в языке Кантор предлагается оператор all — блочная форма логического оператора and:
with var Core:Word screenWidth = 1280, screenHeight = 1024; do onScreenColor[Core:Integer x, y; Core:Word color] = if all x >= 0 and x < screenWidth.AsInteger; y >= 0 and y < screenHeight.AsInteger; end then color else -1.RawWord end; end;Как и везде, строчные и блочные операторы можно произвольно комбинировать, а блоки могут вкладываться друг в друга. Каждый блочный оператор требует завершающего end.
Имея в синтаксисе блочный оператор, достаточно лишь придумать правило для отекстовщика, когда его применять. В примере выше использована группировка по аргументам.
Блок any — блочный or
Пусть имеется некая функция с условием or:onScreenMsg[Core:Integer what, where1, where2] = if what < where1 or what < where2 then 'меньше' else 'не меньше' end;В блочной форме вместо or используется any:
onScreenMsg[Core:Integer what, where1, where2] = if any what < where1; what < where2; end then 'меньше' else 'не меньше' end;Тут также требуется завершающий end. Во всех примерах блочная запись используется внутри строчного оператора, поэтому завершающая точка с запятой после end не ставится.
Комментариев нет :
Отправка комментария
Выбрав в выпадающем списке пункт «Имя/URL», можно оставить комментарий от своего имени без предварительной регистрации.