13. Переменные

Переменная — именованное место, куда сценарий что-то кладёт и откуда потом берёт. На карте её нет: она не привязана к шагу и принадлежит сценарию целиком.

Окно переменных

Состав переменных правится в отдельном окне — ссылка Переменные справа от вкладок панели.

Окно управления переменными
Figure 1. Окно «Переменные»

Верхняя полоса — создание: имя, тип, скоуп, кнопка Добавить. Ниже — перечень того, что уже есть.

Имена уникальны и различают регистр: acc и Acc — две разные переменные. Попытка завести второй acc не пройдёт, и окно скажет почему.

Тип и скоуп

Тип

Строка, Число или Дата/время.

Строка — тип по умолчанию, и это не компромисс. Она самая общая: любой другой тип из строки преобразуется, а обратное верно не всегда. Ничего плохого не случится, если все переменные сценария будут строковыми.

Арифметика при этом работает: сложение двух строк, содержащих числа, даёт числовую операцию. Для склейки текста есть отдельная функция — concat. Так что выбор типа не мешает считать; он мешает как раз наоборот: номер счёта, положенный в число, потеряет ведущий ноль, а DTMF может оказаться звёздочкой, которая в число не влезет.

Скоуп

где переменная живёт. Локальная — только внутри этого вызова, и это правильный выбор в подавляющем большинстве случаев. Остальные скоупы переживают вызов и видны шире; ими пользуются осознанно и редко. Подробнее — Переменная.

Тип и скоуп можно поменять и потом — прямо в строке перечня.

Сколько раз переменная упоминается

Колонка Упоминаний — самое полезное, что есть в этом окне.

Она считает не «сколько раз встретилось имя», а сколько свойств на переменную действительно ссылаются: поля-переменные, аргументы в режиме «переменная», вхождения имени в выражениях и шаблонах.

Ноль упоминаний подписан отдельно — не используется. Такая переменная почти наверняка осталась от прошлых правок: её можно удалить, ничего не сломав.

Перед тем как заводить новую переменную, стоит посмотреть в этот список. response, result, res и answer в одном сценарии — обычный итог работы без него.

Переименование

Клик по имени (или карандаш рядом) начинает правку. Введите новое имя, Enter — и редактор покажет, где старое имя встречается.

Замена вхождений при переименовании
Figure 2. Переименование с заменой вхождений

Для каждого вхождения видно, в каком компоненте оно найдено, в каком поле и как выглядит сама строка. Галочками отмечается, что заменять.

Автоматической замены без подтверждения не бывает — и не зря: имя переменной может встретиться в тексте, который к ней отношения не имеет. Например, в сообщении абоненту.

Поля, ссылающиеся на переменную по идентификатору, переименование переживают сами: там имя не хранится, и подтверждения им не нужно. Список показывает только текстовые вхождения — выражения и шаблоны.

Всё переименование — один шаг отмены: Ctrl+Z вернёт и имя, и все заменённые вхождения разом.

Удаление

Кнопка Удалить в строке. Перед удалением редактор скажет, сколько свойств на переменную ссылаются, и предупредит, что они будут очищены.

Подтверждение удаления переменной
Figure 3. Подтверждение удаления

Что происходит:

  • поля-переменные и аргументы в режиме «переменная», указывавшие на неё, становятся пустыми;

  • имя в выражениях и шаблонах остаётся как есть — редактор не правит чужой текст. Оно будет подчёркнуто как неизвестное;

  • сама переменная исчезает из списка.

Всё это отменяется одним Ctrl+Z.

Выбор переменной в свойстве

Поля типа «переменная» — Результат в переменную, Буфер для DTMF, Причина ошибки в переменную — выбираются списком прямо в строке.

Список переменных в поле
Figure 4. Выбор переменной в поле

Начните печатать — список отберёт подходящие. Если такого имени ещё нет, вместо списка появится пункт Создать «имя»: он открывает окно переменных с уже подставленным именем. Так переменная заводится там, где впервые понадобилась, — и это самый удобный порядок.

Если поле ссылается на переменную, которой в списке нет (например, её удалили в другой вкладке), значение считается незаданным, а поле покажет имя с пометкой «отсутствует». Сценарий при этом не ломается.

◀ 12. Простые поля

14. Аргумент ▶