Difference between revisions of "Qubot Script/ru"

From QuData
Jump to navigation Jump to search
Line 28: Line 28:
 
* '''and''' - логическое ‘И’
 
* '''and''' - логическое ‘И’
 
* '''or''' - логическое ‘ИЛИ’
 
* '''or''' - логическое ‘ИЛИ’
 +
* '''not''' - отрицание ‘НЕТ’
 +
  
 
Например:
 
Например:
  
 
<syntaxhighlight lang="python">res = (a and b) or c</syntaxhighlight>
 
<syntaxhighlight lang="python">res = (a and b) or c</syntaxhighlight>
 +
 
<span id="арифметические-операции"></span>
 
<span id="арифметические-операции"></span>
 
== Арифметические операции ==
 
== Арифметические операции ==
Line 43: Line 46:
  
 
<syntaxhighlight lang="js">res = 2+3-4*5+(1.5-0.2/2)</syntaxhighlight>
 
<syntaxhighlight lang="js">res = 2+3-4*5+(1.5-0.2/2)</syntaxhighlight>
 +
 +
== Комментарии ==
 +
 +
Комментарии используются для документирования фрагментов скрипта.
 +
Могут быть многострочыми и однострочными:
 +
<syntaxhighlight lang="js">
 +
/*
 +
Пример
 +
    многострочного
 +
        комментария
 +
*/
 +
 +
a = 2253 // пример однострочного комментария
 +
</syntaxhighlight>
 +
 
<span id="условный-оператор"></span>
 
<span id="условный-оператор"></span>
 +
 
== Условный оператор ==
 
== Условный оператор ==
 +
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия
  
 
<syntaxhighlight lang="js">if (a > 7)  
 
<syntaxhighlight lang="js">if (a > 7)  
Line 89: Line 109:
 
Объявление массива:
 
Объявление массива:
  
<syntaxhighlight lang="js">arr = [1,2,3]  // создает массив с тремя элементами со значениями 1,2,3</syntaxhighlight>
+
<syntaxhighlight lang="js">arr = [1,2,3]  // создает массив с тремя элементами со значениями 1,2,3
 +
 
 +
</syntaxhighlight>
 +
 
 
Доступ к элементам массива:
 
Доступ к элементам массива:
  
Line 103: Line 126:
 
arr.pop()            // удалить последний элемент массива
 
arr.pop()            // удалить последний элемент массива
 
arr.shift()          // удалить первый элемент массива
 
arr.shift()          // удалить первый элемент массива
arr.slice(start,end)  // возращает часть массива начиная с позиции 'start' и заканчивая если указано позицией 'end'</syntaxhighlight>
+
arr.slice(start,end)  // возращает часть массива начиная с позиции 'start' и заканчивая если указано позицией 'end'
 +
arr.splice(start,end) // удаляет часть массива начиная с позиции 'start' и заканчивая если указано позицией 'end'
 +
 
 
<span id="работа-со-словарем-объектом"></span>
 
<span id="работа-со-словарем-объектом"></span>
 
== Работа со словарем (объектом) ==
 
== Работа со словарем (объектом) ==
Line 110: Line 135:
  
 
<syntaxhighlight lang="js">dic = { n: 1, s: "Wine"  } </syntaxhighlight>
 
<syntaxhighlight lang="js">dic = { n: 1, s: "Wine"  } </syntaxhighlight>
 +
 
Доступ к значениям словаря:
 
Доступ к значениям словаря:
  
Line 120: Line 146:
 
Объявление строковых слотов:
 
Объявление строковых слотов:
  
<syntaxhighlight lang="js">str = "hello"          // используя двойные кавычки  
+
<syntaxhighlight lang="js">
 +
str = "hello"          // используя двойные кавычки  
 
str = 'hello'          // используя одинарные кавычки</syntaxhighlight>
 
str = 'hello'          // используя одинарные кавычки</syntaxhighlight>
 +
 
Операции со строками:
 
Операции со строками:
  
<syntaxhighlight lang="js">base = 'http://imgs/'
+
<syntaxhighlight lang="js">
url = base + 'img1.png' // сложение строк</syntaxhighlight>
+
base = 'http://imgs/'
 +
url = base + 'img1.png' // сложение строк
 +
</syntaxhighlight>
 +
<span id="функции-перехода"></span>
 +
 
 +
Подстановка слотов в строки:
 +
<syntaxhighlight lang="js">
 +
a = 5
 +
str = "a = $a"          // вместо $a будет подставлено значение слота a
 +
print(str)              // выведет: "a = 5"
 +
</syntaxhighlight>
 +
 
 +
Вставка выражений в строки:
 +
 
 +
Выражения можно вставлять в строки, обрамляя их двойными фигурными скобками:
 +
<syntaxhighlight lang="js">
 +
str = "2 + 3 = {{2+3}}" // вычислит выражение и вставит результат в строку
 +
print(str)              // выведет: "2 + 3 = 5"
 +
</syntaxhighlight>
 +
 
 +
Функции работы со строками:
 +
<syntaxhighlight lang="js">
 +
str = "hello"
 +
len = str.length        // получить длинну строки
 +
</syntaxhighlight>
 +
 
 
<span id="функции-перехода"></span>
 
<span id="функции-перехода"></span>
 
== Функции перехода ==
 
== Функции перехода ==
Line 132: Line 185:
  
 
'''''goto(state)''''' - мгновенный переход в шаг state (строка или значение слота $STATE)
 
'''''goto(state)''''' - мгновенный переход в шаг state (строка или значение слота $STATE)
 +
 +
<span id="оператор-button"></span>
 +
== Оператор ```button```
 +
 +
Данный оператор добавляет в интерфейс кнопку
 +
с необходимым текстом и логику, которая должна быть
 +
выполнена при нажатии
 +
<syntaxhighlight lang="js">
 +
button('click me')      // текст в кнопке
 +
{
 +
    // скрипт, который выполнится после нажатия
 +
    print('button was clicked!')
 +
    step('STATE_AFTER_CLICK')
 +
}
 +
</syntaxhighlight>
  
 
<span id="функции-работы-с-контентом"></span>
 
<span id="функции-работы-с-контентом"></span>
Line 138: Line 206:
 
'''''text(obj)''''' - вывести в текущее сообщение текст. Если obj - это сторока, то она выводится не зависимо от текущего языка. Если obj - объект, то он должен состоять из двубуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.
 
'''''text(obj)''''' - вывести в текущее сообщение текст. Если obj - это сторока, то она выводится не зависимо от текущего языка. Если obj - объект, то он должен состоять из двубуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.
  
<syntaxhighlight lang="js">text("Hi world!")     
+
<syntaxhighlight lang="js">
text({ en: "Hi world!", ru: "Привет мир!", es: "¡Hola mundo!"})  </syntaxhighlight>
+
text("Hi world!")     
 +
text({ en: "Hi world!", ru: "Привет мир!", es: "¡Hola mundo!"})   
 +
</syntaxhighlight>
 +
 
 
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().
 
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().
  
<syntaxhighlight lang="js">URL = "https://qudata.com/qubot/im/"   
+
<syntaxhighlight lang="js">
 +
URL = "https://qudata.com/qubot/im/"   
 
images()     
 
images()     
 
image(URL + "owl_a.png")     
 
image(URL + "owl_a.png")     
 
image(URL + "owl_b.png") </syntaxhighlight>
 
image(URL + "owl_b.png") </syntaxhighlight>
 +
 
'''''image(url)''''' - вывести в текущее сообщение картинку, находящуюся по адресу url.
 
'''''image(url)''''' - вывести в текущее сообщение картинку, находящуюся по адресу url.
  
<syntaxhighlight lang="js">URL = "https://qudata.com/qubot/im/"     
+
<syntaxhighlight lang="js">
 +
URL = "https://qudata.com/qubot/im/"     
 
image(URL + "owl_a.png")  </syntaxhighlight>
 
image(URL + "owl_a.png")  </syntaxhighlight>
'''''button(obj)''''' - вывести в текщее сообщение кнопку. Аргумент obj аналогичен действию text.
 
  
<syntaxhighlight lang="js">button("Hi world!")    </syntaxhighlight>
 
 
'''''get_check(list)''''' - записать в слот с именем list значения кнопок типа check (1 - нажата, 0 - отжата)
 
'''''get_check(list)''''' - записать в слот с именем list значения кнопок типа check (1 - нажата, 0 - отжата)
  
 
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.
 
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.
  
<syntaxhighlight lang="js">CHECK = [0,1,0]
+
<syntaxhighlight lang="js">
set_check(CHECK) </syntaxhighlight>
+
CHECK = [0,1,0]
 +
set_check(CHECK)  
 +
</syntaxhighlight>
 +
 
 
'''''get_radio(list)''''' - записать в слот с именем list значения кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.
 
'''''get_radio(list)''''' - записать в слот с именем list значения кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.
  
Line 185: Line 260:
  
 
<syntaxhighlight lang="js">round(3.14159265, 2)  // 3.14</syntaxhighlight>
 
<syntaxhighlight lang="js">round(3.14159265, 2)  // 3.14</syntaxhighlight>
 +
 
<span id="случайные-числа"></span>
 
<span id="случайные-числа"></span>
 
== Случайные числа ==
 
== Случайные числа ==

Revision as of 07:59, 28 March 2022

Qubot Script

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

Объявление слотов (переменных)

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

a = 7

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

Типы слотов

int = 7                             // целочисленный
float = 7.3                         // вещественный
str = "hello"                       // строковый
arr = [7, 7.3, "hello", str]        // массив
dic = { n: 1, s: "Wine"  }          // словарь
bool = true                         // бинарный

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

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


Например:

res = (a and b) or c

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

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

Например:

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

Комментарии

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

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

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

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

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

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'

<span id="работа-со-словарем-объектом"></span>
== Работа со словарем (объектом) ==

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

<syntaxhighlight lang="js">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        // получить длинну строки

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

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

goto(state) - мгновенный переход в шаг 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) - вывести в текущее сообщение картинку, находящуюся по адресу url.

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

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

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

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

get_radio(list) - записать в слот с именем list значения кнопок типа 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].