Qubot Script/ru

From QuData
Jump to navigation Jump to search

Qubot Script

Qubot Script - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота

Слоты

Слот - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили с ним работать через время.

Объявление слота происходит при первом присваивании в него значений.
Например:

a = 7

объявляет слот с именем a и присваивает ему значение 7

Локальные переменные

В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены.
Объявление происходит путем добавления перед именем служебного слова local:

local b = 8    // локальная переменная

Если локальная переменная объявлена внутри фигурных скобок {}, то и ее значение доступно только там:

local b = 8    // локальная переменная текущего скрипта

if (b == 8)
{
   local c = 9 // локальная переменная блока оператора 'if'
   print(c)    // выведет 9
}

print(b)       // выведет 8 
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' не доступна

Типы переменных

sInt = 7                             // целочисленный
sFloat = 7.3                         // вещественный
sStr = "hello"                       // строковый
sArr = [7, 7.3, "hello", sStr]       // массив
sDic = { n: 1, s: "Wine"  }          // словарь
sBool = true                         // бинарный

Логические операции

  • and - логическое ‘И’
  • or - логическое ‘ИЛИ’
  • not - отрицание ‘НЕТ’


Например:

a = true
b = false
c = true
res = not((a and b) or c)

Арифметические операции

  • + - сложение
  • - - вычитание
  • * - умножение
  • / - деление

Например:

res = 2+3-4*5+(1.5-0.2/2)

Комментарии

Комментарии используются для документирования фрагментов скрипта. Могут быть многострочыми и однострочными:

/*
Пример
    многострочного
        комментария
*/

a = 2253 // пример однострочного комментария

Условный оператор

Оператор if используется, если необходимо ветвление логики в зависимости от условия

a = 9
if (a > 7) 
{
    res = 'a more than 7'
}
else
{
    res = 'a less or equal 7'
}

В данном примере проверяется условие a > 7 и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова else

Цикл while

Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками

a = 7
while (a > 0) 
{
    a = a - 1
}

В данном примере скрипт a = a - 1 будет выполнятся до тех пор пока значение слота a не станет равным нулю

Итератор for

Итератор используется для перебора всех значений массива, либо ключей из словаря

arr = [3,2,1]
for(val in arr)
{
    print(val)
}
output:
3
2
1

В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную val соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт print(val) выводящий значение в отладочное окно

Работа с массивами

Объявление массива:

arr = [1,2,3]   // создает массив с тремя элементами со значениями 1,2,3

Доступ к элементам массива:

first  = arr[0]       // получить первый элемент массива
last   = arr[-1]      // получить последний элемент массива
last   = arr[-2]      // получить предпоследний элемент массива
arr[0] = 7            // изменить значение первого элемента

Функции работы с массивом:

len = arr.length      // получить длинну массива
arr.push(4)           // добавить в конец массива элемент со значением '4'
arr.unshift(0)        // добавить в начало массива элемент со значением '0'
arr.pop()             // удалить последний элемент массива
arr.shift()           // удалить первый элемент массива
arr.slice(start,end)  // возращает часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)
arr.splice(start,end) // удаляет часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)

Работа со словарем (объектом)

Объявление словаря:

dic = { n: 1, s: "Wine"  }

Доступ к значениям словаря:

a = dic.n             // доступ к полю с именем "n" через точку  
a = dic["n"]          // доступ к полю с именем "n" через оператор доступа
dic["food"] = "milk"  // добавление в словарь пары ключ-значение

Работа со строками

Объявление строковых слотов:

str = "hello"           // используя двойные кавычки 
str = 'hello'           // используя одинарные кавычки

Операции со строками:

base = 'http://imgs/'
url = base + 'img1.png' // сложение строк

Подстановка слотов в строки:

a = 5
str = "a = $a"          // вместо $a будет подставлено значение слота a
print(str)              // выведет: "a = 5"

Вставка выражений в строки:

Выражения можно вставлять в строки, обрамляя их двойными фигурными скобками:

str = "2 + 3 = {{2+3}}" // вычислит выражение и вставит результат в строку
print(str)              // выведет: "2 + 3 = 5"

Функции работы со строками:

str = "hello"
len = str.length           // получить длинну строки
sub = str.substring(3,5)   // получить подстроку начиная с 3-й позиции и до 5-й не включая

Функции перехода

run(state) - выполнить логику шага state

step(state) - установка шага перехода по умолчанию в значение state

goto(state) - мгновенный переход в шаг state

Оператор button

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

button('click me')      // текст в кнопке
{
    // скрипт, который выполнится после нажатия 
    print('button was clicked!')
    step('STATE_AFTER_CLICK')
}

При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте значений слотов на момент нажатия на кнопку!

Функции работы с контентом

text(obj) - вывести в текущее сообщение текст. Если obj - это сторока, то она выводится не зависимо от текущего языка. Если obj - объект, то он должен состоять из двубуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.

text("Hi world!")     
text({ en: "Hi world!", ru: "Привет мир!", es: "¡Hola mundo!"})

images() - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().

URL = "https://qudata.com/qubot/im/"  
images()     
image(URL + "owl_a.png")     
image(URL + "owl_b.png")

image(url, width) - вывести в текущее сообщение картинку, находящуюся по адресу url. Необязательный параметр width указывает насколько в процентах нужно сжать изображение

URL = "https://qudata.com/qubot/im/"     
image(URL + "owl_a.png")

buttons() - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().

get_check() - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)

set_check(list) - задать значения кнопок типа check из массива list.

CHECK = [0,1,0]
set_check(CHECK)

get_radio() - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.

set_radio(list) - задать значения кнопок типа radio из массива list.

Отладчные функции

print(args) - вывод информации в окно отладки

Округление

floor(val) - округление чисел в меньшую сторону:

floor(5.8)    //  5
floor(-6.1)   // -7

trunc(val) - отбрасывание дробной части:

trunc(5.51)   //  5
trunc(-6.99)  // -6

ceil(val) - округление чисел в большую сторону:

ceil(5.15)    // 6

round(val, num) - округление val до num чисел после запятой:

round(3.14159265, 2)  // 3.14

Случайные числа

randint(min,max) - возвращает целое случайное число в диапазоне [min,max].

random() - возвращает случайное вещественное число в диапазоне [0,1].