На этой странице:
В блоке операций/выражений можно указывать произвольное количество операций которые должен вычислить бот в процессе своей работы. Операции представляют собой выражения записанные с помощью подмножества языка программирования разговорных ботов описание которого содержится ниже. Структура операцийВсе операции бота в пределах одного блока операций представляют собой одно или несколько выражений на языке программирования ботов. Выражения отделяются друг от друга необязательным символом ";", либо символом перевода строки (началом новой строки). Каждое выражение имеет значение. Это значит что выражения могут быть составными. КомментарииПри записи выражений можно указывать комментарии - участки программы которые не участвуют в вычислениях, а выполняют лишь информационную функцию. Есть два вида комментариев:
Пример комментариев:
ПеременныеДля хранения данных в сценариях ботов применяются переменные. Переменная представляет собой именованный участок памяти бота. Она создаётся при первом её использовании в каком-либо блоке операций. При этом значением по умолчанию для всех переменных является nil. Существуют три вида переменных, различающихся своей областью видимости:
Примеры записей переменных разных видов:
Имена переменных могут содержать только цифры, английские и русские буквы, а также символ подчёркивания. Т.е. вы не можете назвать переменную каким-то словом содержащим пробел или символ отличный от русского и английского языков. Тем не менее существует способ задать любое название. Для этого необходимо заключить название переменной в круглые скобки:
Переменные переменныхЯзык выражений бота позоляет динамически вычислять имя переменной в процессе работы бота. Это в частности означает что значением одной переменной может быть имя другой переменной. Или, в более общем случае, именем переменной может быть любое выражение, значением которого является строка. В примере ниже мы определяем три переменные содержащие названия цветов. Затем мы определяем случайно число от 1 до 3 и далее формируем название одной из переменных с тем чтобы узнать значение случайного цвета.
Можно также использовать значения переменных разных типов:
Типы данныхСуществует три примитивных типа данных один объектный тип и специальное значение nil: ЧислаВсе числа трактуются как вещественные знаковые с плавающей точкой. Минимальное и максимальное значение определяется той вычислительной средой в которой работает интерпретатор языка выражений. СтрокиПредставляют собой произвольную последовательность символов заключённую в одинарные или двойные кавычки. Двойные кавычки отличаются от одинарных тем что внутри них распознаются следующие специальные последовательности символов:
В одинарных кавычках все символы тарктуются как есть за исключением последовательности \' которая означает символ одинарной кавычки.
Булевы (логические) значенияКонстанты true и false трактуются как булевы, т.е. такие значения у которых есть только два состояния - истина и ложь. Булевы значения удобно применять в выражении условного блока.
ОбъектыВ стандартной библиотеке языка программирования бота существует ряд функций (операций) значением которых являются так называемые объекты. Объект это особое значение у которого могут быть встроенные свойства и операции или методы. Набор этих свойств и методов определяется типом объекта. Для доступа к свойствам или методам объектов используется оператор точка "." Например, следующий код получает первое сообщение клиента которое является объектом ClientMessage и далее берёт свойство message (текст сообщения) этого объекта:
Свойства и методы объектов, также как и значения переменных, могут быть вычисляемыми:
Существует три типа встроенных объектов являющихся коллекциями произвольных элементов КортежиКортеж или tuple это неизменяемая упорядоченная коллекция произвольных элементов. Создать кортеж можно с помощью круглых скобок:
Для работы с кортежами доступны следующие методы:
СпискиСписок или list это изменяемая упорядоченная коллекция произвольных элементов. Создать список можно с помощью квадратных скобок:
Для работы со списками доступны следующие методы:
Ассоциативные массивы (словари)Ассоциативный массив или словарь (map) это изменяемая упорядоченная коллекция произвольных пар ключ/значение. Создаётся словарь с помощью фигурных скобок:
Для работы со словарями доступны следующие методы:
Специальное значение nilКогда какая-либо переменная не определена, но уже используется в выражении её значением становится nil. Это специальное значение означающее отсутствие какого-либо значения. Это значение также можно присвоить явно:
ОперацииВ языке выражений бота определенно несколько классов операций. Класс операции определяется её первым аргументом. Например, если первый аргумент операции "+" строка, то будет произведена конкатенация строк. Если же это число, то будет осуществляться сложение чисел. Приоритеты операцийЧем приоритет выше, тем раньше выполнится операция. Стандартным способом увеличения приоритета являются круглые скобки.
Арифметические операцииАрифметические операции предназначены для работы с числами. Если значение участвующее в арифметической операции не является числом, произойдёт попытка его преобразования в число (см. ниже).
Побитовые операцииЭто отдельный класс операций предназначенных для выполнения над битовыми представлениями целых чисел.
Таблица преобразования других типов данных в число:
Логические операцииЛогические операции предназначены для работы с булевыми значениями. Если значение не является булевым, то произойдёт попытка его преобразования в булевое значение (см. ниже).
Таблица преобразования других типов данных в булевое значение:
Операции со строкамиЕсть только одна операция для работы со строками. Это сложение или конкатенация строк:
Если первый аргумент оператора "+" не является строкой, то будет выполняться арифметическая операция сложения. Если второй аргумент операции конкатенации не является строкой, то он будет преобразован в строку согласно следующей таблицы преобразования:
Операции сравненияОперации сравнения выполняются над любыми типами данных и результатом их вычисления являются булевы значения.
Операции с коллекциямиДля встроенных типов объектов tuple, list и map доступна одна операция объединения:
Операции присваиванияОперации присваивания позволяют назначать переменным какое-либо значение:
Кроме присваивания значения одной переменной есть возможность присвоить значение сразу нескольким переменным:
ФункцииОсновными строительными элементами выражений в блоке операций являются вызовы функций. Функция это некоторая часть функциональности бота. Например, с помощью функций можно оперировать датой и временем, вычислять более сложные арифметические операции, преобразовывать строку текста в намерения используя сервис NLU, работать с очередью сообщений клиента и т.д. Чтобы вызвать функцию нужно указать её имя, затем в круглых скобках перечислить через запятую её параметры. Имена большинства функций состоят из двух частей разделяемых точкой: названия модуля и собственно названия функции.
Также как и в случае методов объектов имена функций могут динамически вычисляться в процессе выполнения сценария бота.
|
On this page:
In the operation / expression block, you can specify an arbitrary number of operations for the bot to calculate. These operations are expressions are written using a subset of the conversational bot programming language that is described below. Structure of operationsAll bot operations contained in one block represent one or multiple expressions in the bot programming language. Expressions are separated from each other by an optional character ";", or a newline character (beginning of a new line). Every expression has a value. This means that expressions can be compound. CommentsWhen you are writing expressions, you can use comments. Comments are sections of the program that do not participate in calculations but are meant for informational purposes only. There are two types of comments:
Example of comments:
VariablesVariables are used to store data in bot scripts. A variable represents a named location in the bot's memory. It is created the first time it is used in a block of operations. Nil is the default value for all variables. There are three types of variables. They are distinguished by the scope:
Examples of different types of vaiables:
Variable names can contain only numbers, English and Russian letters, and underscores. I.e., you cannot name a variable with a word that contains a space or a character other than Russian and English. However, there is a way to specify any name you want. For this, enclose the variable name in parentheses:
Variable variablesThe bot expression language allows you to dynamically calculate the name of a variable while the bot is running. This means that the name of one variable can be the value of another variable. Or a variable name can be any expression whose value is a string. In the example below, we define three variables that contain names of the colors. Then on the random basis we determine a number in the range from 1 to 3 and then create a name for one of these variables to find out the value of a random color.
You can also use variable values of different types:
Data typesThere are three primitive data types. One of them is the object type and another is the special value nil NumbersAll numbers are treated as real signed numbers with a floating point. The minimum and maximum values are determined by the computing environment where the interpreter of the expression language is functioning. StringsStrings represent an arbitrary sequence of characters enclosed in single or double quotes. Double quotes differ from single quotes so that the following special character sequences are recognized within them:
In single quotes all characters are treated as is except for the sequence \' that means a single quote character.
Boolean (logical) valuesConstants true and false are boolean, i.e. their values can have only one of the following states: true and false. Boolean values are useful in an expression of the conditional block .
ObjectsIn the standard library of the bot programming language, there are functions (operations) whose values are so-called objects. An object is a special value that can have built-in properties and operations or methods. The combination of these properties and methods is determined by the type of the object. To access properties or methods of objects, the dot operator "." is used. For example, below we receive the first message from the client that is a ClientMessage object. Then we use the message property (message text) of that object:
Object properties and methods as well as variable values can be calculated:
There are three types of built-in objects that are collections of arbitrary elements. TuplesA tuple is an unchangeable ordered collection of arbitrary elements. You can create a tuple with parentheses:
The following methods are used to work with tuples:
ListsA list is a changeable ordered collection of arbitrary elements. You can create a list with square brackets:
The following methods are used to work with lists:
Associative arrays (dictionaries)An associative array or dictionary (map) is a mutable ordered collection of arbitrary key/value pairs. A dictionary is created with curly braces:
The following methods are used to work with dictionaries:
Special value nilWhen a variable is not defined but is already used in an expression, its value becomes nil. This is a special value that means the absence of any value. This value can also be assigned explicitly.
OperationsThe bot expression language has several operation classes. An operation class is determined by its first argument. For example, if the first argument of the "+" operation is a string, then strings are concatenated. If the first argument is a number, then numbers are added. Priorities of operationsThe higher the priority is defined, the earlier the operation is performed. Parentheses are used to increase the priority.
Arithmetic operationsАрифметические операции предназначены для работы с числами. Если значение участвующее в арифметической операции не является числом, произойдёт попытка его преобразования в число (см. ниже). Arithmetic operations are used to work with numbers. If the value used in the arithmetic operation is not a number, ther will be an attempt to convert it to a number (see below).
Bitwise operationsThis is a separate class of operations used to work with bit representations of integers.
Table for conversion of other data types to a number:
Logical operationsLogival operations are used to work with boolean values. If the value is not boolean, then there will be an attempt to convert it to a boolean value (see below).
Table for convertion of other data types to a boolean value:
Operations with stringsOnly one operation is used to work with strings. This operation is called the addition or concatenation of strings.
If the first argument of the concatenation operation is not a string, then the addition is performed. If the second argument is not a string, then it is converted to a string according to the following conversion table:
Comparison operationsComparison operations are used to work with any data types. Calculation results are boolean values.
Operations with collectionsThere is a union operation that is used for embedded object types: tuple, list, and map.
Assignment operationsAssignment operators allow to assign a value to variable.
Apart from assigning a value to a variable, you can also assign a value to several variables at once.
FunctionsFunction calls are basic blocks that are used to build expressions in an operation block. A function is a part of a bot's functionality. For example, using functions you can work with date and time, perform complex arithmetic operations, convert a text string to intents using the NLU service, work with the client's message queue, etc. To call a function, you need to specify its name, then list its parameters separated by a comma in parentheses. Names of most functions contain two parts separated by a dot: the name of the module and the name of the function itself.
Like object methods function names can be dynamically calculated during the execution of the bot script.
|