Типы данных переменных

Переменные бывают различных типов. Если вы уже писали на каком-нибудь языке программирования, эта тема для вас будет простой и знакомой. Если нет — уделите ей, пожалуйста, много внимания.

Ботмама может работать с переменными шести типов:

  • строки или текст;
  • числа;
  • логические значения;
  • «ничего»;
  • словари или объекты;
  • списки или массивы.

Типы делятся на простые и составные.

Строки, числа, логические значения и «ничего» — это простые типы. А списки и словари — составные.

Строка или текст

Строки повсюду. Текст, который вы сейчас читаете, состоит из строк. Строки — это базовый и простой тип данных, с которым умеет работать Ботмама.

Если вы записываете какую-то переменную, то без дополнительных манипуляций и параметров в Ботмаме она запишется как строка.

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

Чтобы вывести строку в сообщении или использовать в любом другом шаблоне нужно просто обернуть имя переменной, в которую ее записали, в фигурные скобки: {{variable_name}}, где variable_name — имя переменной.

Также у строк можно получить длину: {{variable_name.length}}.

Обратите внимание, что если в тексте есть эмодзи, длинна строки может быть больше, чем в ней визуально символов. Один эмодзи может занимать 2-8 символов.

Число

Числа — это тоже простой тип данных. С числами можно совершать математические операции в шаблонах. Например, создадим две переменные a и b, выберем для них тип Число и запишем в них 3 и 5. В шаблоне сообщения (или любом другом шаблоне) мы можем сложить их друг с другом: {{add a b}}выведет 8.

Есть и другие математические операции:

  • вычитание {{subtract a b}};
  • умножение {{multiply a b}};
  • деление {{divide a b}}.

Операции могут быть вложены друг в друга при помощи вложенного шаблона в круглых скобках:

a + b × 2 = {{add a (multiply b 2)}}

Число может хранится в строке. Т. е. мы можем сделать переменную с типом Строка, но записать в него число. В этом случае использовать эту переменную с математическими операциями нельзя, потому что Ботмама будет считать, что перед ней не число, а строка. Какие-то операции вроде вычитания могут работать корректно, но лучше записывать переменную как число, иначе математическое выражение может привести к непредвиденному результату, или выполнение бота завершится с ошибкой.

Преобразовать строку в число можно прямо в выражении при помощи toFloat — {{add (toFloat a) (toFloat b)}}. Но мы советуем записывать переменную сразу с типом Число.

Логическое значение

Этот тип нужен для разных условных конструкций. В нем может быть записаны только true и falseправда и ложь соответственно.

Использовать логический тип можно в Запросах, а также в Условных шаблонах. Также логические переменные можно использовать в условных конструкциях шаблонов, например #if. Допустим, у нас есть переменная variable_name, и сперва мы записали туда true.

{{#if variable_name}}
В переменной variable_name — правда
{{else}}
В переменной variable_name — обман
{{/if}}

Тогда такой шаблон напечатает: В переменной variable_name — правда. Если мы запишем в переменную varialbe_namefalse и снова выполним этот шаблон, то он напечатает: В переменной variable_name — обман.

Некоторые типы данных при определенных условиях также можно использовать в #if аналогично true или false:

  • тип Строка, значение — пустая строка — воспринимается как false;
  • тип Число, значение — 0 — воспринимается как false;
  • тип NULL — воспринимается как false;
  • переменной не существует — воспринимается как false;
  • любое другое значение, кроме самого false, воспринимается как true.

NULL или ничего

Это пустое значение, обычно заглушка для данных, которые появятся в будущем. NULL также может использовать в теле запроса или Условном шаблоне.

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

Словарь или объект

Это контейнер для других переменных. Его можно использовать в Запросах, для отправки тела запроса на сторонние ресурсы, а также для наполнения и чтения в других компонентах, например в Вводе от пользователя.

Это составной тип данных, потому словарь состоит из других переменных, которые в него записаны.

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

Такую связь называют ключ: значение.

Например, мы можем представить себе объект, который хранит информацию о пользователе:

Ключ Значение
name Валера
role admin
age 18
gender male
isRoot true

Значения могут быть разных типов: это могут быть и строки (Валера), и числа (18), и флаги (true или false).

Значениями могут быть и другие словари, которые можно вкладывать друг в друга до 10 уровней.

В Записи переменной создать объект можно двумя способами — выбрать тип Пустой объект или выбрать тип Объект из JSON и записать в значение валидный JSON или шаблон, результат которого должен быть валидным JSON. О JSON вы можете почитать в этой статье.

Если мы создали объект (не важно — пустой или с полями из JSON), в последующих компонентах можно что-то в него добавить, указав имя переменной с объектом, а потом через точку имя новой переменной внутри этого объекта.

Например, мы создали Пустой объект в переменной my_object. Тогда мы можем попросить пользователя представиться, а в компоненте Ввод от пользователя мы можем положить внутрь объекта ответное сообщение, указав имя переменной вот так: my_object.name.

Получить записанное значение мы можем также, через точку: {{my_object.name}}, и отправить его, например, в Сообщении.

Список или массив

По аналогии с объектом может пригодиться для наполнения какими-то данными в других компонентах бота.

Это составной тип данных.

Разница с объектом в том, что у элементов списка нет имени, есть только определенное место в этом списке, обозначаемое каким-то числом.

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

Позиция в списке называется индексом, а нумерация элементов — индексацией.

Список можно представить себе как таблицу, где у каждой ячейки в таблице есть номер и значение. Вот так, например, можно представить список гостей приглашенных на вечеринку:

0 1 2 3
Петя Наташа Маша Сережа

Длина списка — это число элементов в него добавленных. У пустого списка их будет ноль.

Чтобы узнать длину списка используют length, записанный через точку после имени переменной со списком.

Например, если мы создадим пустой список с именем my_list, то узнать и получить его длину мы можем при помощи записи: {{my_list.length}}.

Для списка выше, с именами гостей, my_list.length будет равен четырем.

Записать что-то в список можно несколькими способами. Например, через Управление списками в компонентах Запись переменной или Запись переменных, через Ввод от пользователя, Развилку или Запрос. Т.е. через любой компонент, который может записать данные в переменную.

Чтобы это сделать, нужно указать имя, которое мы дали пустому списку при его создании, поставить точку и указать индекс, в который мы хотим записать что-то. Индекс не должен быть больше, чем длинна списка.

Допустим, у нас есть список с именами names и мы хотим записать на первое место в этом списке имя, которое нам пришлет пользователь. Мы можем добавить компонент Ввод от пользователя и в поле Имя переменной указать names.0. Если в names лежит какой-то список, пустой или уже наполненный, в его первую ячейку будет записано имя, которое прислал пользователь.

Также добавлять и менять списки можно через Управление списками в компонентах Запись переменной и Запись переменных.

Чтобы вывести что-то из списка, нужно немного изменить запись. В шаблонах нужно указывать индекс в квадратных скобках после точки: {{names.[0]}}.

Также можно использовать для этого хелпер get — {{get names 0}}, в котором мы указываем имя переменной со списком и индекс.

В начало ↑