Конструкции
Раздел содержит описание различных конструкций языка Выражений, которые можно использовать для доступа к данным, входам, объектам, а так же описание работы с циклами.
Входы
Вход используется для получения доступа к данным, пришедшим в блок.
Получение входа по идентификатору
Идентификатор- идентификатор входа.
Получение входа по наименованию
Наименование- строковое наименование входа.
Несмотря на то, что можно создавать входы с одинаковыми наименованиями, не рекомендуется этого делать, во избежание некорректного расчета.
Сокращенная нотация
Получение входа по его наименованию или идентификатору.
Поиск будет осуществляться как по идентификатору, так и по наименованию. Если имеется два входа с одинаковыми наименованиями/идентификаторами, то будет взят первый из них.
Данные во входе приходят в тех настройках, которые были указаны при создании входа. Таким образом, если указать во входе, что он является массивом, то и в блок попадет массив, даже если внутри этого массива содержится один элемент.
Актуально и обратное - если в данных приходит массив, а в настройках входа массив не указан, то блок не будет считать входные данные массивом.
Получение значений входа
Для объектов и рядов есть возможность получить значение выбранного элемента.
Параметры получения значения задаются в фигурных скобках ({}) после определения входа.
Если была использована не сокращенная нотация входа, то для получения значений необходимо добавить после предыдущих скобок:
В описании примеров ниже, первые фигурные скобки будут опущены для упрощения записиФормат записи
ключ- наименование атрибута или ключа объекта/ряда,значение- значение выбранного ключа.
Особенности реализации
- Вход должен быть массивом (т.к. происходит выборка элементов из массива);
- Доступно только для объектов и рядов; для всех остальных типов данных конструкция "фигурные скобки" у входа будет вызывать ошибку;
- Если параметры недостаточны (подходит несколько элементов для выбора) - блок выдаст ошибку.
Формат выхода
- Для объектов - берется значение атрибута
vl, если его нет, то в качестве значения берется пустой элемент; - Для рядов - словарь формата
{<ключ>: <значение>}; - Для получения конкретного значения ряда в параметрах требуется указать ключ ряда (ключ поля
fkey) и значение отдельного элемента, в качестве параметров<ключ>=<значение>соответственно.
Получение целых объектов и рядов
Если вход является массивом, то для получения объектов или рядов можно использовать следующие Методы:
-
Для выбора нескольких элементов из входа метод
where -
Для выбора единичного элемента из входа метод
first:
Обратите внимание, что при получении элементов из входа, в Условие можно использовать не только атрибуты, но и
первичные ключи, к примеру:
Кроме того, т.к. вход является массивом, то можно получить конкретный элемент массива по его индексу:
Константы
Получение глобальных констант. Синтаксис аналогичен получению входов.
Получение константы по идентификатору
Идентификатор_константы- идентификатор константы.
Получение константы по наименованию
Наименование_константы- строковое наименование константы.
Сокращенная нотация
Получение константы по его наименованию или идентификатору.
Условие
Условие представляет собой выбор одного из двух элементов: при выполнении условия и при его не выполнении.Условие,
Правда и Ложь могут быть выражениями, которые будут рассчитаны при необходимости (условие - будет рассчитано
всегда, правда и ложь - в зависимости от выполнения условия).
В Условие используются базовые операции, возвращающий Логический тип данных.
Часть [ else | иначе ] допустимо не писать, однако, если условие не выполнено, то вернется Пустой элемент.
Актуально для блока "Правила"
В элементы Правда и Ложь, кроме одного выражения, так же можно добавить функцию msg(). Несмотря на то,
что эта функция возвращает пустой элемент, здесь он будет проигнорирован.
Формально, в элементах Правда и Ложь допустимо несколько выражений, однако в качестве результата выполнения
вернется только первое не пустое выражение.
Переменная
Конструкция VAR позволяет записывать какое-угодно выражение в переменную, после чего эту переменную можно использовать в других частях выражения.
Пример
- Конструкция VAR заменила собой устаревшею конструкцию WITH
- VAR всегда указывается в самом начале выражения и вычисляется перед расчетом выражения.
- Можно использовать несколько конструкций VAR, при этом нижние могут включать в себя переменные из верхних:
Цикл for
Цикл for позволяет производить вычисления над каждым элементом из массива. Результатом цикла будет массив выражений,
выполненных внутри цикла.
Вложенные циклы
Можно располагать несколько циклов вложенными друг в друга.
for element in [1, 2, 3] (
for element2 in [10, 20] (
element * element2
)
)
-> [[10, 20], [20, 40], [30, 60]]
Циклы и правила
Актуально для блока "Правила"
Можно располагать правила внутри циклов с разделением через ; (точку с запятой):
Если расчет стоит до первого сработавшего правила, то как только правило сработает в цикле, цикл прерывается и расчет завершается.