Вы просматриваете старую версию данной страницы. Смотрите текущую версию.

Сравнить с текущим просмотр истории страницы

« Предыдущий Версия 18 Следующий »

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

Структура операций

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

Комментарии

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

  • Однострочные. Такие комментарии начинаются с двух слэшей // и заканчиваются окончанием строки.
  • Многострочные. Начало многострочного комментарии начинается с /* и заканчивается */

Пример комментариев:

// Это однострочный комментарий
$x = time()

/**
 * А это уже
 * многострочный
 * комментарий
 */
say("Time is " + $x)

Переменные

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

Имена переменных могут содержать цифры, английские и русские буквы, а также символ подчёркивания.

Существуют три вида переменных, различающихся своей областью видимости:

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

Примеры записей переменных разных видов:

// Переменные $p и $r доступны только в потоке в котором они определены
$p = 2 * 3.14 * $r

// Эта переменная доступна во всех потоках в пределах текущего модуля
// (модуля в котором находится блок операций в котором определена переменная).
#count = queue.size()

// @communicationType глобальная переменная только для чтения. Доступна отовсюду.
$isChat = @communicationType == "TEXT"

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

Язык выражений бота позоляет динамически вычислять имя переменной в процессе работы бота. Это в частности означает что значением одной переменной может быть имя другой переменной. Или, в более общем случае, именем переменной может быть любое выражение, значением которого является строка.

В примере ниже мы определяем три переменные содержащие названия цветов. Затем мы определяем случайно число от 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Горизонтальная табуляция
\"Двойная кавычка

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

// Следуюущая команда выведет в чат фразу из двух строк
// Привет
// "Медвед!"
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        // Получаем первое или последнее сообщение клиента

Специальное значение nil

Когда какая-либо переменная не определена, но уже используется в выражении её значением становится nil. Это специльное значение означающее отсутствие какого-либо значения. Это значение также можно присвоить явно:

$x = 1 + 2 // $x содержит 3
$x = nil   // $x содержит nil
  • Нет меток