AddVarLocal
AddVarLocal — изменяет значение локальной переменной, не заменяя его полностью.
📝 Назначение
Используется для накопления данных внутри одного триггера: счётчиков, списков, конкатенации строк. В отличие от SetVarLocal, эта реакция изменяет существующее значение, а не перезаписывает.
🟢 Важно: Если переменная не существует,
AddVarLocalсоздаст её — но не просто запишет значение, а добавит его к нулевому значению выбранного типа. Подробнее — в разделе «Добавление в несуществующую переменную» ниже.
Когда использовать:
- Подсчёт количества итераций в цикле
- Накопление суммы в процессе обработки
- Добавление элементов в массив
- Конкатенация строк (добавление текста в конец)
🔄 Поведение в зависимости от типа
Что произойдёт, зависит от типа текущего значения переменной:
| Текущее значение | Что делает | Пример |
|---|---|---|
| Целое число | Прибавляет | Было 10, добавить 3 → 13 |
| Дробное число | Прибавляет | Было 10.5, добавить 2.3 → 12.8 |
| Строка | Добавляет текст в конец | Было Привет, добавить , мир → Привет, мир |
| Список | Добавляет элемент в конец | Было [1,2], добавить 3 → [1,2,3] |
| Объект | Объединяет по ключам (поверхностно) | {"a":1} + {"b":2} → {"a":1,"b":2} |
| Логическое | Переключает на противоположное | Было true → станет false |
⚠️ Особенность логического типа: Добавление к логическому значению — это переключение. Само добавляемое значение при этом не учитывается: и
true, иfalseдадут один и тот же результат — противоположный текущему.
Когда типы не совпадают:
| Ситуация | Результат |
|---|---|
К числу добавляют текст, который является числом (5) |
Прибавится как число |
К числу добавляют текст, который числом не является (abc) |
Значение будет заменено на этот текст |
| К целому числу добавляют дробное | Дробная часть отбрасывается, прибавляется целая: 10 + 1.8 → 11, 10 + -1.8 → 9 |
| К строке добавляют число или логическое | Допишется текстом: Привет + true → Приветtrue |
| К списку добавляют объект | Объект станет очередным элементом списка |
| К объекту добавляют не объект | Значение будет заменено целиком |
⚙️ Параметры
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| Название | Строка | ✅ Да | Имя локальной переменной (латиница, кириллица, цифры, _, -). Максимум 256 символов вместе с путём. В пути можно подставлять переменные и макросы — см. Путь из переменной |
| Значение | Любой | ❌ Нет | Значение для добавления. Можно оставить пустым — получится нулевое значение выбранного типа |
| Тип данных | Выбор | ✅ Да | Ровно один из восьми: bool, number, float, string, json, yaml, array json, array yaml |
| Слияние списков | Переключатель | ❌ Нет | Как добавлять список к списку. По умолчанию выключен |
🔗 Слияние списков
Переключатель имеет смысл только когда и переменная, и добавляемое значение — списки.
| Слияние списков | Что делает | Пример |
|---|---|---|
| Выключено | Добавляемый список становится одним элементом | [1,2] + [3,4] → [1,2,[3,4]] |
| Включено | Элементы добавляются подряд | [1,2] + [3,4] → [1,2,3,4] |
💡 Совет: Для истории, лога или накопления записей нужен включённый переключатель. Выключенный удобен, когда каждая запись сама по себе список — например, пара «дата, сумма».
⚠️ Важно: На объекты переключатель не влияет: объекты всегда объединяются по ключам. Если нужна полная замена объекта — это уже
SetVarLocal.
🆕 Добавление в несуществующую переменную
Если переменной ещё нет (или её значение пустое — например, пришло null из JSON), добавление выполняется к нулевому значению выбранного типа. Результат:
| Тип добавляемого значения | Что получится |
|---|---|
| number, float, string | Само значение: 0 + 5 → 5, пустая строка + Привет → Привет |
| json, yaml (объект) | Сам объект |
| array json, array yaml при выключенном слиянии | Список внутри списка: [] + [1,2] → [[1,2]] |
| array json, array yaml при включённом слиянии | Список как есть: [] + [1,2] → [1,2] |
| bool | Всегда true — переключение отсчитывается от false |
💡 Совет: Если нужно, чтобы первое добавление списка дало обычный плоский список, включите переключатель «Слияние списков» — тогда и первое, и последующие добавления будут работать одинаково.
📍 Доступ к значению
После выполнения реакции значение доступно по пути:
${var.local.название}
Примеры:
${var.local.counter} # число (счётчик)
${var.local.items} # массив
${var.local.log} # строка (накопленный лог)
🧪 Примеры использования
Пример 1: Счётчик в цикле (через TriggerFolder)
Задача: При каждом нажатии кнопки увеличивать счётчик.
Реакции в триггере:
AddVarLocal→ название:clicks, значение:1, тип: number (если переменной нет, она будет создана)SendMessage→ текст:Количество нажатий: ${var.local.clicks}
Результат:
- Первое нажатие → переменная создана, значение
1 - Второе нажатие → было
1, стало2 - Третье нажатие → было
2, стало3
Пример 2: Накопление суммы
Задача: В процессе обработки товаров в корзине накапливать итоговую сумму.
Реакции в триггере (для каждого товара):
AddVarLocal→ название:total, значение:${item_price}, тип: float- (После обработки всех товаров)
SendMessage→Итого: ${var.local.total} ₽
Результат: Было 0 (переменная создана), добавить 150 → 150, добавить 200 → 350
Пример 3: Добавление элементов в массив
Задача: Собрать список ID товаров, выбранных пользователем.
Реакции в триггере (при добавлении товара):
AddVarLocal→ название:selected_ids, значение:${product_id}, тип: number- (После завершения выбора)
SendMessage→Выбраны товары: !{json|value: ${var.local.selected_ids}}
Результат:
- Первый товар (
123) → переменной не было, создана со значением123(число, а не список!) - Второй товар (
456) → было123, стало579— числа просто сложились
⚠️ Так делать нельзя. Тип значения описывает то, что добавляют, а не то, что должно получиться. Чтобы собрать именно список, нужен список и включённое слияние:
Правильный вариант:
SetVarLocal→ название:selected_ids, значение: пусто (кнопка «Пропустить»), тип: array jsonAddVarLocal→ название:selected_ids, значение:[${product_id}], тип: array json, слияние списков: включено- (После завершения выбора)
SendMessage→Выбраны товары: !{json|value: ${var.local.selected_ids}}
Результат:
- Первый товар (
123) → было[], стало[123] - Второй товар (
456) → стало[123, 456] - Третий товар (
789) → стало[123, 456, 789]
💡 Совет: Начальный
SetVarLocalс пустым значением здесь не обязателен — при включённом слиянии первое добавление и так создаст список[123]. Но с ним понятнее, и переменная существует с самого начала.
Пример 4: Конкатенация строк (лог действий)
Задача: Вести лог действий пользователя в рамках одного сеанса.
Реакции в триггере (при каждом действии):
AddVarLocal→ название:action_log, значение:\n!{time|output_format: HH:mm:ss} - Выполнено действие, тип: string- (При завершении)
SendMessage→ текст:История действий:${var.local.action_log}
Результат:
- Первое действие →
\n14:30:25 - Выполнено действие - Второе действие →
\n14:30:25 - Выполнено действие\n14:35:10 - Выполнено действие
Пример 5: Объединение JSON-объектов
Задача: Постепенно собирать объект с данными пользователя.
Реакции в триггере:
AddVarLocal→ название:profile, значение:{"name": "Иван"}, тип: jsonAddVarLocal→ название:profile, значение:{"age": 30}, тип: jsonAddVarLocal→ название:profile, значение:{"city": "Москва"}, тип: jsonSendMessage→ текст:Данные: !{json|value: ${var.local.profile}}
Результат:
{
"name": "Иван",
"age": 30,
"city": "Москва"
}
⚠️ Важно: Объединение выполняется поверхностно. Вложенные объекты заменяются, а не объединяются.
🔄 Разница между AddVarLocal и SetVarLocal
| Операция | AddVarLocal | SetVarLocal |
|---|---|---|
Число 10, значение 5 (тип number) |
Будет 15 (прибавит) |
Будет 5 (заменит) |
Строка A, значение B (тип string) |
Будет AB (допишет в конец) |
Будет B (заменит) |
Список [1,2], значение 3 (тип number) |
Будет [1,2,3] (добавит элемент) |
Будет 3 (заменит, список пропадёт) |
Список [1,2], значение [3,4] (тип array json) |
Будет [1,2,[3,4]], а со слиянием — [1,2,3,4] |
Будет [3,4] (заменит) |
Объект {"a":1}, значение {"b":2} (тип json) |
Будет {"a":1, "b":2} (объединит) |
Будет {"b":2} (заменит) |
Логическое true, значение false (тип bool) |
Будет false (переключит) |
Будет false (заменит) |
💡 Совет: Используйте
AddVarLocalдля накопления (счётчики, списки, лог). ИспользуйтеSetVarLocalдля установки начального значения или полной замены.
🔗 Связанные реакции
| Реакция | Назначение |
|---|---|
| SetVarLocal | Создать или перезаписать локальную переменную |
| DelVarLocal | Удалить локальную переменную |
| AddVarCloud | Изменить облачную переменную |
🔗 Связанные разделы
| Раздел | Описание |
|---|---|
| Локальные переменные | Общая информация о локальных переменных |
| Макрос math | Вычисления для значений |
| Макрос list | Работа с массивами |