Якорь Top Top
CSS Stylesheet |
---|
...
...
На этой странице:
Оглавление
...
class bpl
...
Предупреждение | ||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||
Для тестирования сценариев, содержащих BPL-операции, необходимо использовать веб-виджет или интеграцию с каким-либо мессенджером, так как данные операции не работают в тестовом чате внутри редактора.
В блоке операций/выражений можно указывать произвольное количество операций которые должен вычислить бот в процессе своей работы. Операции представляют собой выражения записанные с помощью подмножества языка программирования разговорных ботов описание которого содержится ниже.
Структура операцийВсе операции бота в пределах одного блока операций представляют собой одно или несколько выражений на языке программирования ботов. Выражения отделяются друг от друга необязательным символом ";", либо символом перевода строки (началом новой строки). Каждое выражение имеет значение. Это значит что выражения могут быть составными. КомментарииПри записи выражений можно указывать комментарии - участки программы которые не участвуют в вычислениях, а выполняют лишь информационную функцию. Есть два вида комментариев:
Пример комментариев:
ПеременныеДля хранения данных в сценариях ботов применяются переменные. Переменная представляет собой именованный участок памяти бота. Она создаётся при первом её использовании в каком-либо блоке операций. При этом значением по умолчанию для всех переменных является nil. Существуют три вида переменных, различающихся своей областью видимости:
Примеры записей переменных разных видов:
Имена переменных могут содержать только цифры, английские и русские буквы, а также символ подчёркивания. Т.е. вы не можете назвать переменную каким-то словом содержащим пробел или символ отличный от русского и английского языков. Тем не менее существует способ задать любое название. Для этого необходимо заключить название переменной в круглые скобки:
Переменные переменныхЯзык выражений бота позоляет динамически вычислять имя переменной в процессе работы бота. Это в частности означает что значением одной переменной может быть имя другой переменной. Или, в более общем случае, именем переменной может быть любое выражение, значением которого является строка. В примере ниже мы определяем три переменные содержащие названия цветов. Затем мы определяем случайно число от 1 до 3 и далее формируем название одной из переменных с тем чтобы узнать значение случайного цвета.
Можно также использовать значения переменных разных типов:
Типы данныхСуществует три примитивных типа данных один объектный тип и специальное значение nil: ЧислаВсе числа трактуются как вещественные знаковые с плавающей точкой. Минимальное и максимальное значение определяется той вычислительной средой в которой работает интерпретатор языка выражений. СтрокиПредставляют собой произвольную последовательность символов заключённую в одинарные или двойные кавычки. Двойные кавычки отличаются от одинарных тем что внутри них распознаются следующие специальные последовательности символов: | ||||||||||||||||||||||||||||||||||||||
Последовательность | Значение | |||||||||||||||||||||||||||||||||||||
\n | Перевод строки | |||||||||||||||||||||||||||||||||||||
\r | Возврат каретки | |||||||||||||||||||||||||||||||||||||
\t | Горизонтальная табуляция | |||||||||||||||||||||||||||||||||||||
\" | Двойная кавычка |
Блок кода | ||
---|---|---|
| ||
// Следующая команда выведет в чат фразу из двух строк
// Привет
// "Медвед!"
say("Привет\n\"Медвед!\"")
// Выведет в чат фразу Привет\n'Медвед!'
say('Привет\n\'Медвед!\'') |
Булевы (логические) значения
Константы true и false трактуются как булевы, т.е. такие значения у которых есть только два состояния - истина и ложь. Булевы значения удобно применять в выражении условного блока.
Блок кода | ||
---|---|---|
| ||
$x = true // $x содержит ИСТИНА
$y = !$x // $y содержит ЛОЖЬ |
Объекты
В стандартной библиотеке языка программирования бота существует ряд функций (операций) значением которых являются так называемые объекты. Объект это особое значение у которого могут быть встроенные свойства и операции или методы. Набор этих свойств и методов определяется типом объекта. Для доступа к свойствам или методам объектов используется оператор точка "."
Например, следующий код получает первое сообщение клиента которое является объектом ClientMessage и далее берёт свойство message (текст сообщения) этого объекта:
Блок кода | ||
---|---|---|
| ||
// $first содержит значение объекта ClientMessage
$first = queue.first()
// Получаем значение свойства message
$firstMessage = $first.message |
Свойства и методы объектов, также как и значения переменных, могут быть вычисляемыми:
Блок кода | ||
---|---|---|
| ||
$n = rand(0, 1) // $n содержит или 0 или 1
$method = ["first", "last"].get($n) // $method содержит строку first или last (см. получение элемента списка по индексу)
$firstOrLast = queue.$method // Получаем первое или последнее сообщение клиента
// Или даже так
$firstOrLast = queue.(["first", "last"].get($n)) |
Существует три типа встроенных объектов являющихся коллекциями произвольных элементов
Кортежи
Кортеж или tuple это неизменяемая упорядоченная коллекция произвольных элементов. Создать кортеж можно с помощью круглых скобок:
Блок кода | ||
---|---|---|
| ||
$items = (1, 2, 2) // Кортеж из трёх элементов
$items = ('a',) // Кортеж из одного элемента. Запятая необходима чтобы отличать создание кортежа от просто круглых скобок.
$items = () // Кортеж не содержащий ни одного элемента (пустой кортеж) |
Для работы с кортежами доступны следующие методы:
count()
(1, 2, 3).count()
first()
(1, 2, 3).first()
last()
(1, 2, 3).last()
has(index)
(1, 2, 3).has(0)
(1, 2, 3).has(3)
false
get(index)
(1, 2, 3).get(1)
(1, 2, 3).get(3)
2
nil
(1, 2, 3).contains(3)
(1, 2, 3).contains(0)
true
false
(1, 2, 3).index(3)
(1, 2, 3).index(0)
2
-1
equals(other)
('a', 'b').equals(('a', 'b'))
('a', 'b').equals(('b', 'a'))
false
hash()
('a', true).hash()
Списки
Список или list это изменяемая упорядоченная коллекция произвольных элементов. Создать список можно с помощью квадратных скобок:
Блок кода | ||
---|---|---|
| ||
$items = [1, 2, 2] // Список из трёх элементов
$items = ['a'] // Список из одного элемента
$items = [] // Список не содержащий ни одного элемента (пустой список) |
Для работы со списками доступны следующие методы:
count()
[1, 2, 3].count()
first()
[1, 2, 3].first()
last()
[1, 2, 3].last()
has(index)
[1, 2, 3].has(0)
[1, 2, 3].has(3)
false
get(index)
[1, 2, 3].get(1)
[1, 2, 3].get(3)
2
nil
[1, 2, 3].contains(1)
[1, 2, 3].contains(0)
true
false
[1, 2, 3].index(1)
[1, 2, 3].index(0)
0
-1
toTuple()
[1, 2, 3].toTuple()
(1, 2, 3)
clear()
$x = [1, 2, 3]
$x.clear()
$x содержит пустой список []
reverse()
[1, 2, 3].reverse()
[3, 2, 1]
append(item)
[1, 2, 3].append(4)
[1, 2, 3, 4]
prepend(item)
[1, 2, 3].prepend(0)
[0, 1, 2, 3]
shift()
$x = [1, 2, 3]
$y = $x.shift()
$y будет содержать 1, а $x станет равным [2, 3]
pop()
$x = [1, 2, 3]
$y = $x.pop()
$y будет содержать 3, а $x станет равным [1, 2]
set(index, item)
$x = [1, 2, 3]
$y = $x.set(1, 0)
$z = $x.set(5, 'a')
$y содержит [1, 0, 3]
$z содержит [1, 2, 3, nil, nil, 'a']
remove(index)
$x = [1, 2, 3]
$y = $x.remove(1)
$y будет содержать 2, а $x станет равным [1, 3]
equals(other)
['a', 'b'].equals(['a', 'b'])
['a', 'b'].equals(['b', 'a'])
false
hash()
['a', true].hash()
Ассоциативные массивы (словари)
Ассоциативный массив или словарь (map) это изменяемая упорядоченная коллекция произвольных пар ключ/значение. Создаётся словарь с помощью фигурных скобок:
Блок кода | ||
---|---|---|
| ||
$items = {'a': 1, 'b': 2, 'c': 3} // Словарь из трёх элементов
$items = {1: true} // Cловарь из одного элемента
$items = {} // Словарь не содержащий ни одного значения (пустой словарь) |
Для работы со словарями доступны следующие методы:
count()
{1: 'a', 2: 'b', 3: 'c'}.count()
clear()
$x = {true: false, 'b': true}
$x.clear()
reverse()
{'a': 1, 'b': 2, 'c': 3}.reverse()
values()
{'a': 1, 'b': 2, 'c': 3}.values()
keys()
{'a': 1, 'b': 2, 'c': 3}.keys()
firstKey()
{'a': 1, 'b': 2, 'c': 3}.firstKey()
lastKey()
{'a': 1, 'b': 2, 'c': 3}.lastKey()
first()
{'a': 1, 'b': 2, 'c': 3}.first()
last()
{'a': 1, 'b': 2, 'c': 3}.last()
contains(item)
{'a': 1, 'b': 2, 'c': 3}.contains(2)
{'a': 1, 'b': 2, 'c': 3}.contains(4)
true
false
{'a': 1, 'b': 2, 'c': 3}.key(3)
{'a': 1, 'b': 2, 'c': 3}.key(4)
c
nil
has(key)
{'a': 1, 'b': 2, 'c': 3}.has('a')
{'a': 1, 'b': 2, 'c': 3}.has('d')
true
false
get(key)
{'a': 1, 'b': 2, 'c': 3}.get('b')
{'a': 1, 'b': 2, 'c': 3}.get('d')
2
nil
$x = {1: true, 2: nil}
$x.set(2, false)
$x будет содрежать {1: true, 2: false}
$x = {'a': 1, 'b': 2}
$y = $x.remove('a')
$y будет содержать 1, а $x станет равным {'b': 2}
equals(other)
{'a': 'b'}.equals(['a': 'b'])
{'a': 'b'}.equals(['b': 'a'])
false
hash()
{'a': true}.hash()
Специальное значение nil
Когда какая-либо переменная не определена, но уже используется в выражении её значением становится nil. Это специальное значение означающее отсутствие какого-либо значения. Это значение также можно присвоить явно:
Блок кода | ||
---|---|---|
| ||
$x = 1 + 2 // $x содержит 3
$x = nil // $x содержит nil |
Операции
В языке выражений бота определенно несколько классов операций. Класс операции определяется её первым аргументом. Например, если первый аргумент операции "+" строка, то будет произведена конкатенация строк. Если же это число, то будет осуществляться сложение чисел.
Приоритеты операций
Чем приоритет выше, тем раньше выполнится операция. Стандартным способом увеличения приоритета являются круглые скобки.
Сложение, конкатенация, объединение
Арифметические операции
Арифметические операции предназначены для работы с числами. Если значение участвующее в арифметической операции не является числом, произойдёт попытка его преобразования в число (см. ниже).
+$a
-$a
$a + $b
$a - $b
$a * $b
$a / $b
$a \ $b
$a % $b
$a ** $b
Побитовые операции
Это отдельный класс операций предназначенных для выполнения над битовыми представлениями целых чисел.
~$a
Устанавливаются те биты, которые не установлены в $a, и наоборот
$a & $b
$a | $b
$a ^ $b
Устанавливаются только те биты, которые установлены либо только в $a, либо только в $b, но не в обоих одновременно
Таблица преобразования других типов данных в число:
Логические операции
Логические операции предназначены для работы с булевыми значениями. Если значение не является булевым, то произойдёт попытка его преобразования в булевое значение (см. ниже).
!$a
$a && $b
$a || $b
Таблица преобразования других типов данных в булевое значение:
Операции со строками
Есть только одна операция для работы со строками. Это сложение или конкатенация строк:
"a" + "b"
Если первый аргумент оператора "+" не является строкой, то будет выполняться арифметическая операция сложения. Если второй аргумент операции конкатенации не является строкой, то он будет преобразован в строку согласно следующей таблицы преобразования:
Операции сравнения
Операции сравнения выполняются над любыми типами данных и результатом их вычисления являются булевы значения.
$a == $b
true если $a тождественно равно $b
$a != $b
$a > $b
$a >= $b
$a < $b
$a <= $b
Операции с коллекциями
Для встроенных типов объектов tuple, list и map доступна одна операция объединения:
(1, 2) + (3, 4)
['a', 'b'] + ['c']
{'a': 0, 'b': 2} + {'a': 1, 'c': 3}
Операции присваивания
Операции присваивания позволяют назначать переменным какое-либо значение:
$a = 123
$a += 1
$a -= 1
$a *= 2
$a /= 2
$a \= 2
$a %= 5
$a **= 3
$a &= 1
$a |= 3
$a ^= 4
Кроме присваивания значения одной переменной есть возможность присвоить значение сразу нескольким переменным:
($x, $y, $z) = (1, 2, 3)
$x = 1
$y = 2
$z = 3
(1, 2, 3)
[$x, $y] = ($y, $x)
$x = $y
$y = $x
[$y, $x]
{'a': $x, 'b': $y} = {'b': true, 'a': false}
$x = false
$y = true
{'a': false, 'b': true}
($x, $y, $z) += [1, 2, 3]
$x = $x + 1
$y = $y + 2
$z = $z + 3
($x + 1, $y + 1, $z + 1)
{3: $x, 7: $y} *= (2, 3)
$x = $x * 2
$y = $y * 3
{3: $x * 2, 7: $y * 3}
Функции
Основными строительными элементами выражений в блоке операций являются вызовы функций. Функция это некоторая часть функциональности бота. Например, с помощью функций можно оперировать датой и временем, вычислять более сложные арифметические операции, преобразовывать строку текста в намерения используя сервис NLU, работать с очередью сообщений клиента и т.д.
Чтобы вызвать функцию нужно указать её имя, затем в круглых скобках перечислить через запятую её параметры. Имена большинства функций состоят из двух частей разделяемых точкой: названия модуля и собственно названия функции.
Блок кода | ||
---|---|---|
| ||
$number = math.rand(5, 10) // Получаем случайное число от 5 до 10. math - название модуля, rand - название функции |
Также как и в случае методов объектов имена функций могут динамически вычисляться в процессе выполнения сценария бота.
Блок кода | ||
---|---|---|
| ||
$funcIdx = math.rand(0, 1) // Получаем случайное число 0 или 1 которое будет индексом названия функции в кортеже
$number = math.(('min', 'max').get($funcIdx))(3, 7) // Получаем название функции min или max и далее вызываем её. Таким образом мы вычисляем случайным образом либо минимальное либо максимальное значение |
pages/viewpage.action?pageId=137790002" target="_blank">Создание тестового виджета</a>. |
В блоке операций/выражений можно указывать произвольное количество операций, которые должен выполнить бот в процессе своей работы. Операции представляют собой выражения, записанные с помощью подмножества языка программирования разговорных ботов, описание которого содержится ниже.
Структура операций
Все операции бота в пределах одного блока операций представляют собой одно или несколько выражений на языке программирования ботов. Выражения отделяются друг от друга необязательным символом ";" либо символом перевода строки (началом новой строки). Каждое выражение имеет значение. Это значит, что выражения могут быть составными.
Комментарии
При записи выражений можно указывать комментарии – участки программы, которые не участвуют в вычислениях, а выполняют лишь информационную функцию. Есть два вида комментариев:
- Однострочные. Такие комментарии начинаются с символов // и заканчиваются окончанием строки.
- Многострочные. Начало многострочного комментария начинается с символов /* и заканчивается символами */.
Блок кода | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
// Это однострочный комментарий
$x = time()
/**
* А это уже
* многострочный
* комментарий
*/
say("Time is " + $x) |
Переменные
Для хранения данных в сценариях ботов применяются переменные. Переменная представляет собой именованный участок памяти бота. Она создаётся при первом своем использовании в каком-либо блоке операция. При этом значением по умолчанию для всех переменных является nil.
Существует три вида переменных, различающихся своей областью видимости:
- Переменные, видимые в пределах одного модуля в одном потоке.
Доступны для чтения и записи. Названия таких переменных начинаются с символа $. Такие переменные удобно использовать для хранения значений промежуточных операций и вычислений. - Переменные, видимые в пределах одного модуля в разных потоках.
Доступны для чтения и записи. Названия переменных уровня модуля начинаются с символа #. Поскольку такие переменные видны во всех потоках бота их удобно использовать для взаимодействия между потоками. - Глобальные переменные или переменные окружения.
Автоматически задаваемые переменные, которые видны во всех потоках всех модулей бота. Эти переменные доступны только для чтения и хранят информацию о глобальном контексте работы бота. Их имена начинаются с символа @.
Блок кода | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
// Переменные $p и $r доступны только в потоке, в котором они определены
$p = 2 * 3.14 * $r
// Эта переменная доступна во всех потоках в пределах текущего модуля
// (модуля, в котором находится блок операций, в котором определена переменная).
#count = queue.size()
// @communicationType глобальная переменная только для чтения. Доступна везде.
$isChat = @communicationType == "TEXT" |
Имена переменных могут содержать только цифры, английские и русские буквы, а также символ подчёркивания. Т.е. вы не можете назвать переменную каким-то словом, содержащим пробел или символ отличный от символов русского и английского языков. Тем не менее, существует способ использовать любое название. Для этого необходимо заключить название переменной в круглые скобки.
Блок кода | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
$('日本') = 123 // Создали переменную c именем 日本
$x = $('日本') // $x теперь равна 123
$(math.rand(1, 2)) = 0 // Динамически создаём переменную с именем 1 или 2 и присваиваем ей значение 0 |
Переменные переменных
Язык выражений бота позволяет вычислять имя переменной динамически в процессе работы бота. Это означает, что значением одной переменной может быть имя другой переменной или любое выражение, значением которого является строка.
В примере ниже мы определяем три переменные, содержащие названия цветов. Затем мы определяем случайно число от 1 до 3 и далее формируем название одной из переменных с тем, чтобы узнать значение случайного цвета.
Блок кода | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
// Создадим три переменные с именами x1, x2 и x3
$x1 = "red"
$x2 = "blue"
$x3 = "green"
// Случайное число от 1 до 3
$n = math.rand(1, 3)
// Получаем цвет динамически сформировав имя переменной с цветом и взяв её значение
$color = $("x" :: $n) |
Можно также использовать значения переменных разных типов.
Блок кода | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
// $x содержит название переменной #y
$x = "y"
// #y содержит название глобальной переменной communicationType
#y = "communicationType"
// Вычисляется так @#$x -> @#("y") -> @#y -> @("communicationType") -> @communicationType
$communicationType = @#$x |
Типы данных
Существует три примитивных типа данных, один объектный тип и специальное значение nil.
Числа
Все числа трактуются как вещественные знаковые с плавающей точкой. Минимальное и максимальное значения определяются той вычислительной средой, в которой работает интерпретатор языка выражений.
Строки
Представляют собой произвольную последовательность символов, заключённую в одинарные или двойные кавычки. Двойные кавычки отличаются от одинарных тем, что внутри них распознаются следующие специальные последовательности символов.
Последовательность | Значение |
---|---|
\n | Перевод строки |
\r | Возврат каретки |
\t | Горизонтальная табуляция |
\v | |
\" | Двойная кавычка |
В одинарных кавычках все символы трактуются как есть за исключением последовательности символов \', которая означает символ одинарной кавычки.
Блок кода | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
// Следующая команда выведет в чат фразу из двух строк
// Привет
// "Медвед!"
say("Привет\n\"Медвед!\"")
// Выведет в чат фразу Привет\n'Медвед!'
say('Привет\n\'Медвед!\'') |
Булевы (логические) значения
Константы true и false трактуются как булевы, т.е. такие значения, у которых есть только два состояния – истина и ложь. Булевы значения удобно применять в выражениях условного блока.
Блок кода | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
$x = true // $x содержит ИСТИНА
$y = !$x // $y содержит ЛОЖЬ |
Объекты
В стандартной библиотеке языка программирования бота существует ряд функций (операций), значением которых являются так называемые объекты. Объект – это особое значение, у которого могут быть встроенные свойства и операции или методы. Набор этих свойств и методов определяется типом объекта. Для доступа к свойствам или методам объектов используется оператор точка ".".
Например, с помощью следующего кода можно получить первое сообщение клиента, которое является объектом ClientMessage и далее получить свойство message (текст сообщения) этого объекта.
Блок кода | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
// $first содержит значение объекта ClientMessage
$first = queue.first()
// Получаем значение свойства message
$firstMessage = $first.message |
Свойства и методы объектов (также как и значения переменных) могут быть вычисляемыми.
Блок кода | ||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||
$n = rand(0, 1) On this page:
In the operations / expressions 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: Блок кода | | |||||||||||||||||||||||||
|
Блок кода | ||
---|---|---|
| ||
// Create three variables with names x1, x2 and x3
$x1 = "red"
$x2 = "blue"
$x3 = "green"
// Random number in the ramge from 1 to 3 $n = math.rand(1, 3)
// Get the color dynamically generating the name for a variable with the color and using its value
$color = $("x" + $n) |
You can also use variable values of different types:
Блок кода | ||
---|---|---|
| ||
// $x contains the name of variable #y
$x = "y"
// #y contains the name of the global variable communicationType
#y = "communicationType"
// Calculated in the following way @#$x -> @#("y") -> @#y -> @("communicationType") -> @communicationType
$communicationType = @#$x |
Data types
There are three primitive data types. One of them is the object type and another is the special value nil
Numbers
All 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.
Strings
Strings 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:
["first", "last"].get($n) // $method содержит строку first или last (см. получение элемента списка по индексу)
$firstOrLast = queue.$method // Получаем первое или последнее сообщение клиента
// Или даже так
$firstOrLast = queue.(["first", "last"].get($n))
Существует три типа встроенных объектов являющихся коллекциями произвольных элементов.
Кортежи
Кортеж или tuple – это неизменяемая, упорядоченная коллекция произвольных элементов. Создать кортеж можно с помощью круглых скобок.
Блок кода | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
$items = (1, 2, 2) // Кортеж из трёх элементов.
$items = ('a',) // Кортеж из одного элемента. Запятая необходима, чтобы отличать создание кортежа от просто круглых скобок.
$items = () // Кортеж не содержащий ни одного элемента (пустой кортеж). |
Для работы с кортежами доступны следующие методы.
Метод | Описание | Пример | Результат | |
---|---|---|---|---|
1 | count() | Получение количества элементов кортежа | (1, 2, 3).count() | 3 |
2 | first() | Получение первого элемента кортежа | (1, 2, 3).first() | 1 |
3 | last() | Получение последнего элемента кортежа | (1, 2, 3).last() | 3 |
4 | has(index) | Возвращает true, если кортеж содержит элемент с указанным порядковым номером, и false в противном случае | (1, 2, 3).has(0) | true false |
5 | get(index) | Возвращает элемент кортежа по его порядковому номеру или nil, если такого элемента нет | (1, 2, 3).get(1) | 2 |
6 | contains(item) | Возвращает 1, если кортеж содержит элемент item, и ничего (void) в противном случае. | (1, 2, 3).contains(3) | true |
7 | index(item) | Возвращает порядковый номер элемента item либо -1, если такого элемента нет | (1, 2, 3).index(3) | 2 |
8 | equals(other) | Возвращает true, если other представляет собой точно такой же кортеж (т.е. кортеж, содержащий те же самые элементы), и false в противном случае | ('a', 'b').equals(('a', 'b')) | true false |
9 | hash() | Возвращает строку, представляющую собой хэш кортежа (значение, уникально идентифицирующее содержимое кортежа) | ('a', true).hash() | bb2fadd01f7d0ac9864dc963a61f653f |
10 | copy() | Создаёт поверхностную копию кортежа (т.е. не копирует коллекции внутри кортежа). | $list = ["a", "b"] $copy = (1, 2, $list).copy() $copy.get(2).append("c") | $list будет равен |
11 | deepCopy() | Создаёт полную копию кортежа. | $list = ["a", "b"] | $list будет равен |
12 | merge(collection) | Возвращает новый кортеж полученный из слияния текущего кортежа с коллекций (другим кортежем, списком или словарём) | (1, 2, 3).merge((4, 5)) | (1, 2, 3, 4, 5) |
Списки
Список или list – это изменяемая, упорядоченная коллекция произвольных элементов. Создать список можно с помощью квадратных скобок.
Блок кода | |||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||||||
$items = [1, 2, 2] // Список из трёх элементов
$items = ['a'] // Список из одного элемента
$items = [] 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: Блок кода | | ||||||||||||||||||||
| Method | Description | Example | Result
Для работы со списками доступны следующие методы.
Метод | Описание | Пример | Результат |
---|---|---|---|
count() |
...
Получение количества элементов списка | [ |
...
1, 2, 3 |
...
].count() | 3 |
first() |
...
Получение первого элемента списка | [ |
...
1, 2, 3 |
...
].first() | 1 |
last() |
...
Получение последнего элемента списка | [ |
...
1, 2, 3 |
...
].last() | 3 |
has(index) |
...
Возвращает true, если список содержит элемент с указанным порядковым номером, и false в противном случае | [ |
...
1, 2, 3 |
...
].has(0) |
...
[1, 2, 3 |
...
].has(3) | true false |
get(index) |
...
Returns an element in a tuple by its index or returns nil if such element is absent
Возвращает элемент списка по его порядковому номеру или nil, если такого элемента нет | [ |
...
1, 2, 3 |
...
].get(1) |
...
[1, 2, 3 |
...
].get(3) | 2 |
contains(item) |
...
Возвращает true, |
...
если список содержит элемент item, и false в противном случае | [ |
...
1, 2, 3 |
...
].contains( |
...
1) |
...
[1, 2, 3 |
...
].contains(0) | true |
index(item) |
...
Возвращает порядковый номер элемента item либо -1, если такого элемента нет | [ |
...
1, 2, 3 |
...
].index( |
...
1) |
...
[1, 2, 3 |
...
].index(0) |
...
0 |
...
toTuple( |
...
Lists
A list is a changeable ordered collection of arbitrary elements. You can create a list with square brackets:
...
language | text |
---|
...
) |
...
('a', 'b').equals(('a', 'b'))
('a', 'b').equals(('b', 'a'))
...
hash()
...
Returns a string that represents the hash of the tuple (a value that identifies the contents of the tuple)
...
('a', true).hash()
...
Возвращает кортеж, состоящий из элементов данного списка | [1, 2, 3].toTuple() | (1, 2, 3) | |
clear() | Удаляет все элементы списка | $x = [1, 2, 3] | $x содержит пустой список [] |
reverse() | Меняет порядок следования элементов списка на обратный | [1, 2, 3].reverse() | [3, 2, 1] |
append(item) | Добавляет переданное значение item в конец списка |
[1, 2, |
...
The following methods are used to work with lists:
...
count()
...
3].append(4) | [1, 2, 3, 4] | |
prepend(item) | Добавляет переданное значение item в начало списка | [1, 2, 3]. |
...
prepend(0) | [0, 1, 2, 3] |
...
shift() |
...
Удаляет и возвращает первый элемент списка | $x = [1, 2, 3] |
...
| $y будет содержать 1 |
...
last()
...
, а $x станет равным [2, 3] | ||
pop() | Удаляет и возвращает последний элемент списка | $x = [1, 2, 3] |
...
has(index)
...
| $y будет содержать 3, а $x станет равным [1, 2] | |
set(index, item) | Добавляет значение в указанную позицию списка. Если позиция лежит за пределами списка, то он будет расширен нулевыми значениями до нужного размера. | $x = [1, 2, 3] |
...
|
...
get(index)
...
$z = $x.set(5, 'a') | $y содержит [1, 0, 3] | |
remove(index) | Удаляет элемент списка в указанной позиции и возвращает его значение | $x = |
...
[1, 2, 3] |
...
2
nil
| $y будет содержать 2, а $x станет равным [1, 3] | |
equals(other) | Возвращает true, если other представляет собой точно такой же список (т.е. список, содержащий те же самые элементы), и false в противном случае | ['a', 'b'].equals(['a', 'b']) |
...
) | true false |
...
hash( |
...
) |
...
[1, 2, 3].index(1)
[1, 2, 3].index(0)
...
0
-1
...
toTuple()
...
[1, 2, 3].toTuple()
...
(1, 2, 3)
...
clear()
...
$x = [1, 2, 3]
$x.clear()
...
$x contains empty list []
...
reverse()
...
[1, 2, 3].reverse()
...
[3, 2, 1]
...
append(item)
...
[1, 2, 3].append(4)
...
[1, 2, 3, 4]
...
prepend(item)
...
[1, 2, 3].prepend(0)
...
[0, 1, 2, 3]
...
shift()
...
$x = [1, 2, 3]
$y = $x.shift()
...
$y will contain 1 and $x will be equal to [2, 3]
...
pop()
...
$x = [1, 2, 3]
$y = $x.pop()
...
$y will contain 3 and $x will be equal to [1, 2]
...
set(index, item)
...
Adds a value to the specified position on the list. If the position is located outside the list, then it will be expanded with zero values to the necessary size.
...
$x = [1, 2, 3]
$y = $x.set(1, 0)
$z = $x.set(5, 'a')
...
$y contains [1, 0, 3]
$z contains [1, 2, 3, nil, nil, 'a']
...
remove(index)
...
Deletes the element at the specified position on the list and returns its value
...
$x = [1, 2, 3]
$y = $x.remove(1)
...
$y will contain 2 and $x will be equal to [1, 3]
...
equals(other)
...
['a', 'b'].equals(['a', 'b'])
['a', 'b'].equals(['b', 'a'])
...
hash()
...
['a', true].hash()
...
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:
Блок кода | ||
---|---|---|
| ||
$items = {'a': 1, 'b': 2, 'c': 3} // Dictionary of three elements
$items = {1: true} // Dictionary of one element
$items = {} // Dictionary without any elements (empty dictionary) |
The following methods are used to work with dictionaries:
...
count()
...
{1: 'a', 2: 'b', 3: 'c'}.count()
...
clear()
...
$x = {true: false, 'b': true}
$x.clear()
...
reverse()
...
Возвращает строку, представляющую собой хэш списка (значение, уникально идентифицирующее содержимое списка) | ['a', true].hash() | bb2fadd01f7d0ac9864dc963a61f653f | |
copy() | Создаёт поверхностную копию списка (т.е. не копирует коллекции внутри списка). | $list = ["a", "b"] $copy = [1, 2, $list].copy() $copy.get(2).append("c") | $list будет равен ["a", "b", "c"] $copy будет равен [1, 2, ["a", "b", "c"]] |
deepCopy() | Создаёт полную копию списка. | $list = ["a", "b"] $copy = [1, 2, $list].deepCopy() $copy.get(2).append("c") | $list будет равен ["a", "b"] $copy будет равен [1, 2, ["a", "b", "c"]] |
merge(collection) | Сливает текущий список с коллекций (другим кортежем, списком или словарём) и возвращает его. | ["a", "b"].merge((1, 2)) | ["a", "b", 1, 2] ["a", "b", "a", "c"] ["a", "b", 1, 2] |
Ассоциативные массивы (словари)
Ассоциативный массив или словарь (map) – это изменяемая, упорядоченная коллекция произвольных пар ключ/значение. Создаётся словарь с помощью фигурных скобок.
Блок кода | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
$items = {'a': 1, 'b': 2, 'c': 3} // Словарь из трёх элементов
$items = {'a': true} // Cловарь из одного элемента
$items = {} // Словарь, не содержащий ни одного значения (пустой словарь) |
Для работы со словарями доступны следующие методы.
Метод | Описание | Пример | Результат |
---|---|---|---|
count() | Получение количества элементов словаря | {1: 'a', 2: 'b', 3: 'c'}.count() | 3 |
clear() | Удаление всех элементов словаря | $x = {true: false, 'b': true} | $x будет содержать пустой словарь |
reverse() | Меняет порядок следования элементов словаря на обратный | {'a': 1, 'b': 2, 'c': 3}.reverse() | {'c': 3, 'b': 2, 'a': 1} |
values() | Возвращает список, состоящий из всех значений словаря | {'a': 1, 'b': 2, 'c': 3}.values() | [1, 2, 3] |
keys() | Возвращает список, состоящий из всех ключей словаря | {'a': 1, 'b': 2, 'c': 3}.keys() | ['a', 'b', 'c'] |
firstKey() | Получение первого ключа словаря | {'a': 1, 'b': 2, 'c': 3}.firstKey() | 'a' |
lastKey() | Получение последнего ключа словаря | {'a': 1, 'b': 2, 'c': 3}. |
...
lastKey() | 'c' | |
first() | Получение первого элемента словаря | {' |
...
a': |
...
1, 'b': 2, ' |
...
c': |
...
values()
...
3}.first() | 1 | |
last() | Получение последнего элемента словаря | {'a': 1, 'b': 2, 'c': 3}. |
...
last() |
...
3 |
...
...
contains( |
...
item) | Возвращает true, если словарь содержит элемент item, и false в противном случае | {'a': 1, 'b': 2, 'c': 3}. |
...
contains(2) |
...
{'a': 1, 'b': 2, 'c' |
...
firstKey()
...
: 3}.contains(4) | true | |
key(item) | Возвращает ключ, соответствующий значению item, или nil в противном случае | {'a': |
...
1, |
...
'b': |
...
2, |
...
'c': |
...
3}. |
...
lastKey()
...
key(3) |
...
1, |
...
'b': |
...
2, |
...
'c': |
...
3}. |
...
key(4) |
...
c |
...
|
...
has( |
...
key) | Возвращает true, если элемент с указанным ключом сущеcтвует, и false в противном случае | {'a': 1, 'b': 2, 'c': 3}. |
...
has('a') |
...
...
last()
...
{'a': 1, 'b': 2, 'c': 3}. |
...
has('d') | true |
...
false |
...
get( |
...
key) |
...
Возвращает элемент словаря по его ключу или nil, если такого элемента нет | {'a': 1, 'b': 2, 'c': 3}. |
...
get( |
...
'b') |
...
get( |
...
'd') |
...
2 |
...
nil |
set(key |
...
, item) |
...
Returns the key that corresponds to the value of item. Otherwiese returns nil.
Устанавливает элемент словаря с заданным ключом | $x = {1: true, 2: nil} | $x будет содержать {1: true, 2: false} | |
remove(key) | Удаляет элемент словаря по ключу и возвращает его значение | $x = {'a': 1, 'b': 2} | $y будет содержать 1, а $x станет равным { |
...
'b': 2 |
...
} | ||
equals(other) | Возвращает true, если other представляет собой точно такой же словарь (т.е. словарь, содержащий те же самые ключи и значения), и false в противном случае | {'a': |
...
'b'}.equals(['a': |
...
' |
...
c
nil
...
has(key)
...
b']) |
|
...
'b' |
...
}.equals(['b': |
...
'a']) | true false | ||
hash() | Возвращает строку, представляющую собой хэш словаря (значение, уникально идентифицирующее содержимое словаря) | {'a': true}.hash() | bb2fadd01f7d0ac9864dc963a61f653f |
copy() | Создаёт поверхностную копию словаря (т.е. не копирует коллекции внутри словаря). | $list = ["a", "b"] $copy = {"a": 1, "b": $list}.copy() $copy.get("b").append("c") | $list будет равен ["a", "b", "c"] $copy будет равен {"a": 1, "b": ["a", "b", "c"]} |
deepCopy() | Создаёт полную копию словаря. | $list = ["a", "b"] $copy = {"a": 1, "b": $list}.deepCopy() $copy.get("b").append("c") | $list будет равен ["a", "b"] $copy будет равен {"a": 1, "b": ["a", "b", "c"]} |
merge(collection) | Сливает текущий словарь с коллекций (другим кортежем, списком или словарём) и возвращает его. | {"a": true, "b": 123}.merge((1, 2)) | {"a": true, "b": 123, 0: 1, 1: 2} {"a": true, "b": 123, 0: 1, 1: 2} {"a": 321, "b": 123, "c": false} |
Специальное значение nil
Когда какая-либо переменная не определена, но уже используется в выражении, её значением становится nil. Это специальное значение, означающее отсутствие какого-либо значения. Это значение также можно присвоить явно.
Блок кода | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
| 1, 'b': 2, 'c': 3}.has('d')true | ||||||||||
get(key) | Returns the element of the dictionary by its key, or returns nil if such element is absent | {'a': 1, 'b': 2, 'c': 3}.get('b') | 2 | ||||||||
set(key, item) | Sets the dictionary element with the given key | $x = {1: true, 2: nil} | $x will contain {1: true, 2: false} | ||||||||
remove(key) | Deletes a dictionary element by key and returns its value | $x = {'a': 1, 'b': 2} | $y will contain 1 and $x will be equal to {'b': 2} | ||||||||
equals(other) | Returns true if other is exactly the same dictionary (i.e. a dictionary that contains the same keys and values). Otherwise returns false. | {'a': 'b'}.equals(['a': 'b']) | true false | ||||||||
hash() | Returns a string that represents the hash of the dictionary (a value that identifies the contents of the dictionary) | {'a': true}.hash() | bb2fadd01f7d0ac9864dc963a61f653f | ||||||||
Блок кода | language | text||||||||||
$x = 1 + 2 // $x containsсодержит 3 $x = nil // $xcontains содержит nil 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. | Operation | Priority | Associativity | Description
Операции
В языке выражений бота определенно несколько бинарных и унарных операций. Некоторые операции могут быть применены к разным типам данных. Тип результата операции определяется видом операции. Например, операция "::" принимает в качестве аргументов строки. Поэтому все операнды этой операции будут неявно преобразованы к строке.
Приоритеты операций
Чем приоритет выше, тем раньше выполнится операция. Стандартным способом увеличения приоритета являются круглые скобки.
Операция | Приоритет | Ассоциативность | Описание |
---|---|---|---|
** | 12 |
...
Правая | Возведение в степень |
+ | 11 |
...
– |
...
Унарный плюс | ||
- | 11 | - |
...
Унарный минус | |
~ | 11 |
...
– |
...
Побитовая инверсия | |
! | 10 |
...
– |
...
Логическое отрицание | |
* | 9 |
...
Левая |
...
Умножение | |
/ | 9 |
...
Левая |
...
Деление | |
\ | 9 |
...
Левая |
...
Целочисленное деление | |
% | 9 |
...
Левая | Остаток от деления |
+ | 8 |
...
Addition, concatenation, union
Левая | Сложение | ||
- | 8 | Левая | Вычитание |
:: |
8 |
...
Левая |
...
Конкатенация строк | |
< | 7 |
...
– |
...
Меньше чем | |
<= | 7 |
...
– | Меньше или равно |
> | 7 |
...
– |
...
Больше чем | |
>= | 7 |
...
– | Больше или равно |
== | 6 |
...
– |
...
Равно | |
!= | 6 |
...
– |
...
Не равно | |
& | 5 |
...
Левая |
...
Побитовое И | |
^ | 4 |
...
Левая | Побитовое исключающее ИЛИ |
| | 3 |
...
Левая |
...
Побитовое ИЛИ | |
&& | 2 |
...
Левая |
...
Логическое И | |
|| | 1 |
...
Левая |
...
Логическое ИЛИ | |
= | 0 |
...
Правая |
...
Присваивание | |
+= | 0 |
...
Правая | Сложение с присваиванием | ||
-= | 0 | Правая | Разность с присваиванием |
:: |
...
= | 0 |
...
Правая | Конкатенация с присваиванием |
*= | 0 |
...
Правая | Умножение с присваиванием |
...
/= | 0 |
...
Правая | Деление с присваиванием |
...
\= | 0 |
...
Правая | Целочисленное деление с присваиванием |
%= | 0 |
...
Правая | Остаток от деления с присваиванием |
**= | 0 |
...
Правая | Возведение в степень с присваиванием |
...
&= | 0 |
...
Правая | Бинарное И с присваиванием |
^= | 0 |
...
Правая | Бинарное исключающее И с присваиванием |
|= | 0 |
...
Правая | Бинарное ИЛИ с присваиванием |
Арифметические операции
...
Арифметические операции предназначены для работы с числами.
...
Если значение, участвующее в арифметической операции, не является числом, то произойдёт попытка его преобразования в
...
число (см. ниже).
...
Пример |
---|
...
Результат |
---|
+$a |
...
Преобразование $a в число |
-$a |
...
Смена знака $a |
$a + $b |
...
Сумма $a |
...
и $b |
$a - $b |
...
Разность между $a |
...
и $b |
$a * $b |
...
Умножение $a |
...
на $b |
$a / $b |
...
Деление $a |
...
на $b |
$a \ $b |
...
Целочисленное деление $a на $b |
$a % $b |
...
Остаток от деления $a на $b |
$a ** $b |
...
Возведение $a в степень $b |
Bitwise operations
This is a separate class of operations used to work with bit representations of integers.
...
~$a
...
Побитовые операции
Это отдельный класс операций, предназначенных для выполнения над битовыми представлениями целых чисел.
Пример | Результат |
---|---|
~$a | Устанавливаются те биты, которые не установлены в $a, и наоборот |
$a & $b |
...
Устанавливает только те биты, которые установлены и в $a, и в $b |
$a | $b |
...
Устанавливает те биты, которые установлены в $a или в $b | |
$a ^ $b | Устанавливаются только те биты, которые установлены либо только |
...
в $a, либо только |
...
в $b, но не в |
...
Sets only those bits that are set to either $a or $b, but not to both of them
оба одновременно |
Таблица преобразования других типов данных в число.
Тип | Значение | Результат |
---|
Table for conversion of other data types to a number:
...
NIL | nil | 0 |
...
Логический | true | 1 |
...
Логический | false | 0 |
...
Строка | "" | 0 |
...
Строка | "123.5" | 123.5 |
...
Строка | "abc" |
...
ошибка |
...
Объект |
...
любой |
...
ошибка |
Logical operations
...
Логические операции
Логические операции предназначены для работы с булевыми значениями. Если значение не является булевым, то произойдёт попытка его преобразования в булево значение (см. ниже).
Пример | Результат |
---|---|
!$a | true |
...
, если $a |
...
равно false, |
...
и false в противном случае | |
$a && $b | true |
...
, если $a |
...
и $b |
...
true, false в противном случае | |
$a || $b | false, |
...
если $a |
...
и $b |
...
false, |
...
true |
...
в противном случае |
Таблица преобразования других типов данных в булево значение.
Тип | Значение | Результат |
---|
Table for convertion of other data types to a boolean value:
...
NIL | nil | false |
...
Число | 0 | false |
...
Число | Любое ненулевое |
...
true |
...
Строка | "" | false |
...
Строка | Любая непустая | true |
...
Объект |
...
Любой | true |
Operations with strings
Only one operation is used to work with strings. This operation is called the addition or concatenation of strings.
Операции со строками
Есть только одна операция для работы со строками. Это сложение или конкатенация строк.
Пример | Результат |
---|
...
"a" |
...
:: "b" | "ab" |
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:
...
Если аргумент операции конкатенации не является строкой, то он будет преобразован в строку согласно следующей таблицы преобразования.
Тип | Значение | Результат |
---|
...
NIL | nil | "" |
...
Число | 123.45 | "123.45" |
...
Логический | true | "true" |
...
Логический | false | "false" |
...
Объект |
...
Любой | Сериализация в строку |
Операции сравнения
Операции сравнения выполняются над любыми типами данных и результатом их вычисления являются булевы значения.
Пример | Результат |
---|
Comparison operations
Comparison operations are used to work with any data types. Calculation results are boolean values.
...
$a == $b | true |
...
, если $a тождественно равно $b | |
$a != $b | true |
...
, если $a тождественно не равно $b | |
$a > $b | true |
...
, если $a больше $b |
$a >= $b |
...
true,если $a больше или равно $b |
$a < $b |
...
true,если $a меньше $b |
$a <= $b |
...
true,если $a меньше или равно $b |
Операции с коллекциями
Для встроенных типов объектов tuple, list и map доступна одна операция объединения.
Пример | Результат |
---|
Operations with collections
There is a union operation that is used for embedded object types: tuple, list, and map.
...
(1, 2) + (3, 4) | (1, 2, 3, 4) |
['a', 'b'] + ['c'] | ['a', 'b', 'c'] |
{'a': 0, 'b': 2} + {'a': 1, 'c': 3} | {'a': 1, 'b': 2, 'c': 3} |
Assignment operations
Assignment operators allow to assign a value to variable.
Операции присваивания
Операции присваивания позволяют назначать переменным какое-либо значение.
Пример | Результат |
---|
...
$a = 123 | $a |
...
содержит 123 | |
$a += 1 | $a = $a + 1 |
$a -= 1 | $a = $a - 1 |
$a ::= "b" | $a = $a :: "b" |
$a *= 2 | $a = $a * 2 |
$a /= 2 | $a = $a / 2 |
$a \= 2 | $a = $a \ 2 |
$a %= 5 | $a = $a % 5 |
$a **= 3 | $a = $a ** 3 |
$a &= 1 | $a = $a & 1 |
$a |= 3 | $a = $a | 3 |
$a ^= 4 | $a = $a ^ 4 |
Apart from assigning a value to a variable, you can also assign a value to several variables at once.
...
Кроме присваивания значения одной переменной есть возможность присвоить значение сразу нескольким переменным.
Пример | Результат присваивания | Значение выражения присваивания |
---|
...
($x, $y, $z) = (1, 2, 3) | $x = 1 | (1, 2, 3) |
[$x, $y] = ($y, $x) | $x = $y | [$y, $x] |
{'a': $x, 'b': $y} = {'b': true, 'a': false} | $x = false | {'a': false, 'b': true} |
($x, $y, $z) += [1, 2, 3] | $x = $x + 1 | ($x + 1, $y + 1, $z + 1) |
{3: $x, 7: $y} *= (2, 3) | $x = $x * 2 | {3: $x * 2, 7: $y * 3} |
Функции
Основными строительными элементами выражений в блоке операций являются вызовы функций. Функция – это некоторая часть функциональности бота. Например, с помощью функций можно оперировать датой и временем, вычислять более сложные арифметические операции, преобразовывать строку текста в намерения, используя сервис NLU, работать с очередью сообщений клиента и т.д.
Чтобы вызвать функцию, нужно указать её имя, затем в круглых скобках перечислить через запятую её параметры. Имена большинства функций состоят из двух частей, разделяемых точкой: названия модуля и названия функции.
Блок кода | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||
Блок кода | language | text|||||||||||||
$number = math.rand(5, 10) / / Returns a random number in the range from/ Получаем случайное число от 5to до 10. math- –module названиеname модуля, rand- –function названиеnameLike object methods function names can be dynamically calculated during the execution of the bot script функции |
Также как и в случае методов объектов имена функций могут динамически вычисляться в процессе выполнения сценария бота.
...
Блок кода | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
| text
| |||||||||||
$funcIdx = math.rand(0, 1) // ReturnsПолучаемa random number in the range from случайное число 0to 1 that will be the index of the function name in the tuple или 1, которое будет индексом названия функции в кортеже. $number = math.(('min', 'max').get($funcIdx))(3, 7) //Returns Получаемthe названиеname of функцииthe min orили maxfunction иand далееthen вызываемcalls it её.This Такимway образом,we мыcalculate вычисляемeither случайнымthe образомminimum либоor минимальное,maximum либоvalue on the random basis |
...
максимальное значение. |