15. Выражения и шаблоны
Редактор выражения
Слева — сам текст выражения с подсветкой: строки, числа, имена функций и переменные окрашены по-разному. Справа — дерево того, что можно использовать.
Имя переменной пишется в квадратных скобках: [dtmf], [sitedomain].
Строки — в двойных кавычках. Всё остальное — функции и операторы.
|
Одинарные кавычки — не замена двойным. Синтаксис языка в основе своей эрланговский, и текст в одинарных кавычках становится атомом. Атомы на сервере ограничены и по количеству, и по длине: короткая строка пройдёт, а большой JSON в одинарных кавычках разместить не удастся. Правило простое: строки — только в двойных кавычках. |
Дерево функций
Дерево устроено по разделам: переменные этого сценария, общие функции по темам (математика, строки, дата и время, преобразования, хеши, файлы, доступ), константы и символы, функции конкретного вида сценария.
Рядом с каждой группой — сколько в ней функций. У каждой функции показаны
имя и типы параметров: substr (str,int,int). Клик вставляет вызов
в текст на место курсора.
Поле над деревом ищет по имени — быстрее, чем раскрывать группы подряд.
|
Переменные сценария лежат в дереве первым разделом. Вставлять их оттуда надёжнее, чем печатать руками: имя подставится ровно так, как оно записано, вместе со скобками. |
Шаблон
Шаблон — это обычный текст, в котором участки в двойных фигурных скобках вычисляются как выражения:
Здравствуйте, {{ str([name]) }}. Ваш баланс {{ str([sum]) }} рублей.
Подсветка отделяет подстановки от остального текста, так что забытая скобка видна сразу.
Выражение и шаблон взаимно переводятся: переключив вкладку, вы увидите то же самое значение в другой записи. Перевод делает сервер, а не редактор.
|
Если сценарий пришёл со старой записью шаблона — одинарными скобками, — редактор переведёт его в двойные и скажет об этом строкой под полем. Это не правка «за вас»: пока вы не нажали Сохранить, в сценарии ничего не изменилось. |
Проверка на сервере
Свои правила разбора редактор не выдумывает: язык принадлежит серверу, и проверяет выражение он же.
Проверка идёт, когда вы уходите из поля, и ещё раз — при сохранении значения. Ошибка показывается так, как её сформулировал сервер: рамка поля краснеет, под ним появляется сообщение.
Что важно знать:
-
ошибка не запрещает сохранить. Редактор предупреждает, а не сторожит: бывает, что сервер отвечает не то, а работа стоять не должна;
-
при обрыве связи проверки нет. Ответ не пришёл — сообщение не показывается. Отсутствие ошибки при потерянной связи ничего не доказывает;
-
ответ запоминается. Открыв то же выражение снова, вы увидите уже известную ошибку без нового запроса.
Несколько действий в одном выражении
У языка эрланговский синтаксис, и операторы в нём разделяются запятыми.
Значением выражения становится последний из них. Это открывает приём,
о котором стоит знать заранее, — функцию component.
component выполняет прямо внутри выражения типизированный компонент
сценария со свойствами, заполненными здесь же, в редакторе выражений,
дожидается его завершения и передаёт управление следующему оператору.
То есть кусок сценария можно записать не квадратами на карте,
а последовательностью внутри одного аргумента.
|
Это глубокий приём, а не повседневный. Он уместен там, где рисовать на карте три квадрата ради одного технического шага дороже, чем написать строку, — и неуместен там, где логику потом придётся читать глазами: на карте она видна, внутри выражения нет. |
Что стоит помнить
-
Выражение всегда возвращает одно значение. Ветвление делается компонентами на карте, а не формулой.
-
Приведение типов явное:
str(…)для строки,num(…)для числа. Молчаливого приведения не будет. -
Незаданная переменная — не пустая строка и не ноль. Сравнивать с ней бессмысленно; проверяйте
[x] == null. -
Длинное выражение — повод завести переменную и разбить вычисление на два шага. Читать сценарий будете вы же.