...
Все операции бота в пределах одного блока операций представляют собой одно или несколько выражений на языке прграммирования программирования ботов. Выражения отделяются друг от друга необязательным символом ";", либо символом перевода строки (началом новой строки). Каждое выражение имеет значение. Это значит что выражения могут быть составными.
...
- Переменные видимые в пределах одного модуля в одном потоке. Доступны для чтения и записи. Названия таких переменных наяинаются начинаются с $. Такие переменные удобно использовать для хранения промежуточных операций и вычислений.
- Переменные видимые в пределах одного модуля в разных потоках. Доступны для чтения и записи. Названия переменных уровня модуля начинаются с #. Поскольку такие переменные видны во всех потоках бота их удобно использовать для взаимодействия между потоками.
- Глобальные переменные или переменные окружения. Автоматически задаваемые переменные, которые видны во всех потоках всех модулей бота. Эти переменные доступны только для чтения и хранят информацию о глобальном контексте работы бота. Их имена начинаются с символа @
...
Имена переменных могут содержать только цифры, английские и русские буквы, а также символ подчёркивания. Т.е. вы не можете назвать переменную каким-то словом содержащим пробел или символ отличный от русского и нглийского английского языков. Тем не менее существует способ задать любое название. Для этого необходимо заключить название переменной в круглые скобки:
Блок кода | ||
---|---|---|
| ||
$('日本') = 123 // Создали переменную c именем 日本 $x = $('日本') // $x теперь равна 123 $(math.rand(1, 2)) = 0 // Динамически создаём переменную с именем 1 или 2 и присваеваемприсваиваем ей значение 0 |
Переменные переменных
...
Представляют собой произвольную последовательность симолов символов заключённую в одинарные или двойные кавычки. Двойные кавычки отличаются от одинарных тем что внутри них распознаются следующие специальные последовательности символов:
...
В одинарных кавычках все символы тарктуются как есть за исключением последовательности \' которая означет означает символ одинарной кавычки.
Блок кода | ||
---|---|---|
| ||
// СледуюущаяСледующая команда выведет в чат фразу из двух строк // Привет // "Медвед!" say("Привет\n\"Медвед!\"") // Выведет в чат фразу Привет\n'Медвед!' say('Привет\n\'Медвед!\'') |
...
Булевы (логические) значения
Константы true и false трактуются как булевыебулевы, т.е. такие значения у которых есть только два состояния - истина и ложь. Булевые Булевы значения удобно применять в выражении условного блока.
...
В стандартной библиотеке языка программирования бота существует ряд функций (операций) значением которых являются так называемые объекты. Объект это особое значение у которого могут быть встроенные свойства и операции или методы. Набор этих свойств и методов определяется типом объекта. Для доступа к свойствам или методам объектов используется оператор точка "."
Например, следущий следующий код получает первое сообщение клиента которое является объектом ClientMessage и далее берёт свойство message (текст сообщения) этого объекта:
Блок кода | ||
---|---|---|
| ||
// $first содержит значение объекта ClientMessage $first = queue.first() // Получаем значение совойствасвойства message $firstMessage = $first.message |
...
Блок кода | ||
---|---|---|
| ||
$items = (1, 2, 2) // Кортеж из трёх элементов $items = ('a',) // Кортеж из одного эелементаэлемента. Запятая необходима чтобы отличать создание кортежа от просто круглых скобок. $items = () // Кортеж не содержащий ни одного элемента (пустой кортеж) |
...
Блок кода | ||
---|---|---|
| ||
$items = [1, 2, 2] // Список из трёх элементов $items = ['a'] // Список из одного эелементаэлемента $items = [] // Список не содержащий ни одного элемента (пустой список) |
...
Ассоциативный массив или словарь (map) это изменяемая упорядоченная поллекция коллекция произвольных пар ключ/значение. Создаётся словарь с помощью фигурных скобок:
Блок кода | ||
---|---|---|
| ||
$items = {'a': 1, 'b': 2, 'c': 3} // СловаоьСловарь из трёх элементов $items = {1: 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': 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) | true |
key(item) | Возвращает ключ соответствующий значению item или nil в противном случае | {'a': 1, 'b': 2, 'c': 3}.key(3) | c |
has(key) | Возвращает true, если элемент с указанным ключём ключом сущеcтвует и false в противном случае | {'a': 1, 'b': 2, 'c': 3}.has('a') | true |
get(key) | Возвращает элемент словаря по его ключу или nil если такого элемента нет | {'a': 1, 'b': 2, 'c': 3}.get('b') | 2 |
set(key, item) | Устанавливает элемент словаря с заданным ключёмключом | $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': 'b']) | true false |
hash() | Возвращает строку, представляющую собой хэш словаря (значение уникально идентифицирующее содержимое словаря) | {'a': true}.hash() | bb2fadd01f7d0ac9864dc963a61f653f |
...
Когда какая-либо переменная не определена, но уже используется в выражении её значением становится nil. Это специльное специальное значение означающее отсутствие какого-либо значения. Это значение также можно присвоить явно:
...
Есть только одна операция для работы со строками. Это сложение или конкатенация строк:
ПриерПример | Результат |
---|---|
"a" + "b" | "ab" |
Если первый аргумент оператора "+" не является строкой, то будет выполняться арифметическая операция сложения. Если второй аргумент операции конкатенации не является строкой, то он будет преобразован в строку согласно следующей таблицы преобразования:
...
Операции сравнения выполняются над любыми типами данных и результатом их вычисления являются булевые булевы значения.
Пример | Результат |
---|---|
$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 |
...
Операции присваивания
Операции присваивания повзоляют позволяют назначать переменным какое-либо значение:
...
Блок кода | ||
---|---|---|
| ||
$funcIdx = math.rand(0, 1) // ПолучемПолучаем случайное число 0 или 1 которое будет индексом названия функции в кортеже $number = math.(('min', 'max').get($funcIdx))(3, 7) // Получаем название функции min или max и далее вызываем её. Таким образом мы вычисляем случайным образом либо минимальное либо максимальное значение |
...