Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

...

Все операции бота в пределах одного блока операций представляют собой одно или несколько выражений на языке прграммирования программирования ботов. Выражения отделяются друг от друга необязательным символом ";", либо символом перевода строки (началом новой строки). Каждое выражение имеет значение. Это значит что выражения могут быть составными.

...

  • Переменные видимые в пределах одного модуля в одном потоке. Доступны для чтения и записи. Названия таких переменных наяинаются начинаются с $. Такие переменные удобно использовать для хранения промежуточных операций и вычислений.
  • Переменные видимые в пределах одного модуля в разных потоках. Доступны для чтения и записи. Названия переменных уровня модуля начинаются с #. Поскольку такие переменные видны во всех потоках бота их удобно использовать для взаимодействия между потоками. 
  • Глобальные переменные или переменные окружения. Автоматически задаваемые переменные, которые видны во всех потоках всех модулей бота. Эти переменные доступны только для чтения и хранят информацию о глобальном контексте работы бота. Их имена начинаются  с символа @

...

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

Блок кода
languagetext
$('日本') = 123         // Создали переменную c именем 日本
$x = $('日本')          // $x теперь равна 123
$(math.rand(1, 2)) = 0 // Динамически создаём переменную с именем 1 или 2 и присваеваемприсваиваем ей значение 0

Переменные переменных

...

Представляют собой произвольную последовательность симолов символов заключённую в одинарные или двойные кавычки. Двойные кавычки отличаются от одинарных тем что внутри них распознаются следующие специальные последовательности символов:

...

В одинарных кавычках все символы тарктуются как есть за исключением последовательности \' которая означет означает символ одинарной кавычки.

Блок кода
languagetext
// СледуюущаяСледующая команда выведет в чат фразу из двух строк
// Привет
// "Медвед!"
say("Привет\n\"Медвед!\"")

// Выведет в чат фразу Привет\n'Медвед!'
say('Привет\n\'Медвед!\'')

...

Булевы (логические) значения

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

...

В стандартной библиотеке языка программирования бота существует ряд функций (операций) значением которых являются так называемые объекты. Объект это особое значение у которого могут быть встроенные свойства и операции или методы. Набор этих свойств и методов определяется типом объекта. Для доступа к свойствам или методам объектов используется оператор точка "."

Например, следущий следующий код получает первое сообщение клиента которое является объектом ClientMessage и далее берёт свойство message (текст сообщения) этого объекта:

Блок кода
languagetext
// $first содержит значение объекта ClientMessage 
$first = queue.first()

// Получаем значение совойствасвойства message
$firstMessage = $first.message

...

Блок кода
languagetext
$items = (1, 2, 2) // Кортеж из трёх элементов
$items = ('a',)    // Кортеж из одного эелементаэлемента. Запятая необходима чтобы отличать создание кортежа от просто круглых скобок.
$items = ()        // Кортеж не содержащий ни одного элемента (пустой кортеж)

...

Блок кода
languagetext
$items = [1, 2, 2] // Список из трёх элементов
$items = ['a']     // Список из одного эелементаэлемента
$items = []        // Список не содержащий ни одного элемента (пустой список)

...

Ассоциативный массив или словарь (map) это изменяемая упорядоченная поллекция коллекция произвольных пар ключ/значение. Создаётся словарь с помощью фигурных скобок:

Блок кода
languagetext
$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.clear()
$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)
{'a': 1, 'b': 2, 'c': 3}.contains(4)

true
false

key(item)Возвращает ключ соответствующий значению item или nil в противном случае

{'a': 1, 'b': 2, 'c': 3}.key(3)
{'a': 1, 'b': 2, 'c': 3}.key(4)

c
nil

has(key)
Возвращает true, если элемент с указанным ключём ключом сущеcтвует и false в противном случае
{'a': 1, 'b': 2, 'c': 3}.has('a')
{'a': 1, 'b': 2, 'c': 3}.has('d')

true
false

get(key)
Возвращает элемент словаря по его ключу или nil если такого элемента нет
{'a': 1, 'b': 2, 'c': 3}.get('b')
{'a': 1, 'b': 2, 'c': 3}.get('d')

2
nil

set(key, item)Устанавливает элемент словаря с заданным ключёмключом
$x = {1: true, 2: nil}
$x.set(2, false)

$x будет содрежать {1: true, 2: false}

remove(key)Удаляет элемент словаря по ключу и возвращает его значение

$x = {'a': 1, 'b': 2}
$y = $x.remove('a')

$y будет содержать 1, а $x станет равным {'b': 2}

equals(other)
Возвращает true, если other представляет собой точно такой же словарь (т.е. ловарь словарь содержащий те же самые ключи и значения) и false в противном случае
{'a': 'b'}.equals(['a': 'b'])
{'a': 'b'}.equals(['b': 'a'])
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

...

Операции присваивания

Операции присваивания повзоляют позволяют назначать переменным какое-либо значение:

...

Блок кода
languagetext
$funcIdx = math.rand(0, 1)                          // ПолучемПолучаем случайное число 0 или 1 которое будет индексом названия функции в кортеже
$number = math.(('min', 'max').get($funcIdx))(3, 7) // Получаем название функции min или max и далее вызываем её. Таким образом мы вычисляем случайным образом либо минимальное либо максимальное значение 

...