<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.qudata.com//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Abeyn</id>
	<title>QuData - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.qudata.com//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Abeyn"/>
	<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Special:Contributions/Abeyn"/>
	<updated>2026-04-12T15:10:52Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.34.1</generator>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=96</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=96"/>
		<updated>2022-05-24T07:04:10Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: /* Дата и время */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&lt;br /&gt;
sRegExp = /[abc]/                    // регулярное выражение&lt;br /&gt;
sNone = none                         // неопределенное значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также разрешается и питоновский стиль комментария:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 2253 # пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
'''''push(val1,val2...)''''' - добавить в конец массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.push(4) // добавить значение '4' в конец массива&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''unshift(val1,val2...)''''' - добавить в начало массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.unshift(0) // добавить значение '0' в начало&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''pop()''''' - удалить последний элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''shift()''''' - удалить первый элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''slice(start,end)''''' - возвращает часть массива начиная с позиции '''start''' и если указана переменная '''end''', то до нее не включая&lt;br /&gt;
&lt;br /&gt;
'''''splice(start, deleteCount)''''' - удаляет '''deleteCount''' элементов начиная с позиции '''start'''&lt;br /&gt;
&lt;br /&gt;
'''''clear()''''' - очистить массив&lt;br /&gt;
&lt;br /&gt;
Функции работы с массивом словарей:&lt;br /&gt;
&lt;br /&gt;
'''''find(EXPR)''''' - ищет элементы массива, удовлетворяющие условию '''EXPR'''. Найденные элементы возвращаются в виде массива&amp;lt;br&amp;gt;&lt;br /&gt;
Например:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''total(EXPR)''''' - применить выражение '''EXPR''' к каждому элементу массива и суммировать все значения&amp;lt;br&amp;gt;&lt;br /&gt;
Например посчитаем сумму товаров в корзине:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120, amount: 3},&lt;br /&gt;
  {title: &amp;quot;Pizza&amp;quot;, price: 100, amount: 2},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40, amount: 3},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.total(price * amount)   // для каждого элемента массива умножаем цену на количество и складываем результат&lt;br /&gt;
print(&amp;quot;К оплате: $res грн.&amp;quot;)            // выведет сумму товаров: &amp;quot;К оплате: 680 грн.&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''count(EXPR)''''' - найти количество элементов массива для которых истинно выражение '''EXPR'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120, amount: 3},&lt;br /&gt;
  {title: &amp;quot;Pizza&amp;quot;, price: 100, amount: 2},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40, amount: 3},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.count(price &amp;lt; 100)                            // для каждого элемента массива умножаем цену на количество и складываем результат&lt;br /&gt;
print(&amp;quot;Количество товаров, дешевле 100 грн: $res&amp;quot;)            // выведет количество товаров: &amp;quot;Количество товаров, дешевле 100 грн: 1&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {2+3}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экранирование спецсимволов '$','{','}' происходит путем добавления наклонной черты '\'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;price: 4.99\$ \{sale\}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)                       // выведет: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&lt;br /&gt;
'''''length''''' - получить длинну строки&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // вернет 5 - число символов строки &amp;quot;hello&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''substring(start,end)''''' - получить подстроку начиная с позиции '''start''' и до позиции '''end''' не включая&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;http://server/im.png&amp;quot;&lt;br /&gt;
substr = str.substring(7,13)  // вернет строку &amp;quot;server&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''search(pattern)''''' - найти позицию первого вхождения '''pattern''', иначе вернуть -1. Аргумент '''pattern''' может быть как строкой&lt;br /&gt;
так и регулярным выражением:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;apple orange juice&amp;quot;&lt;br /&gt;
res = str.search('orange')          // вернет позицию строки 'orange': 6&lt;br /&gt;
res = str.search(/(orange|juice)/)  // вернет позицию строки 'orange' или 'juice'&lt;br /&gt;
res = str.search('pizza')           // не найдет 'pizza' и вернет -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
Иногда удобно в цикле иметь и индекс массива, для этого перед переменной значения добавляем имя переменной индекса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(i, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$i: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
0: 3&lt;br /&gt;
1: 2&lt;br /&gt;
2: 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перебора ключей и значений словаря используется аналогичная конструкция:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = {pizza: 100, milk: 20, wine: 120}&lt;br /&gt;
for(key, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$key: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
pizza: 100&lt;br /&gt;
milk: 20&lt;br /&gt;
wine: 120&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-in&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''in''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор '''in''' проверяет есть ли значение в массиве либо является ключём в словаре.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;]             // массив&lt;br /&gt;
print(&amp;quot;hello&amp;quot; in sArr)               // вернет true, т.к. значение &amp;quot;hello&amp;quot; присутствует в массиве sArr &lt;br /&gt;
sDic = { price: 100, food: &amp;quot;Wine&amp;quot;}   // словарь&lt;br /&gt;
print(&amp;quot;food&amp;quot; in sDic)                // вернет true, т.к. ключ &amp;quot;food&amp;quot; присутствует в словаре sDic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
'''''button(caption){ SCRIPT }'''''&amp;lt;br&amp;gt;&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку с текстом '''caption''' в текущее сообщение. После нажатия на кнопку выполняется логика '''SCRIPT'''.&lt;br /&gt;
Если '''caption''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если '''obj''' - это сторока, то она выводится не зависимо от текущего языка. Если '''obj''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку. Если '''url''' - это строка, то он используется не зависимо от текущего языка. Если '''url''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.. Необязательный параметр '''width''' указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &lt;br /&gt;
image({ en: URL + &amp;quot;en.png&amp;quot;, ru: URL + &amp;quot;ru.png&amp;quot;}) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;дата-и-время&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Дата и время ==&lt;br /&gt;
&lt;br /&gt;
'''''date(format)''''' - возвращает текущую дату и время в указанном формате. По умолчанию аргумент '''format''' принимает значение: '''%d/%m/%Y %H:%M:%S'''&lt;br /&gt;
&lt;br /&gt;
Поддерживаемые коды форматирования:&lt;br /&gt;
&lt;br /&gt;
* '''%y''' - год без столетия ('22')&lt;br /&gt;
* '''%Y''' - год ('2022')&lt;br /&gt;
* '''%m''' - месяц&lt;br /&gt;
* '''%d''' - день &lt;br /&gt;
* '''%H''' - часы &lt;br /&gt;
* '''%M''' - минуты &lt;br /&gt;
* '''%S''' - секунды &lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
date()  // 17/05/2022 18:16:31 т.е. сейчас&lt;br /&gt;
date('%Y.%m.%d %H:%M:%S')  // 2022.05.17 18:16:31&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=95</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=95"/>
		<updated>2022-05-24T07:03:08Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: /* Дата и время */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&lt;br /&gt;
sRegExp = /[abc]/                    // регулярное выражение&lt;br /&gt;
sNone = none                         // неопределенное значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также разрешается и питоновский стиль комментария:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 2253 # пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
'''''push(val1,val2...)''''' - добавить в конец массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.push(4) // добавить значение '4' в конец массива&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''unshift(val1,val2...)''''' - добавить в начало массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.unshift(0) // добавить значение '0' в начало&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''pop()''''' - удалить последний элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''shift()''''' - удалить первый элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''slice(start,end)''''' - возвращает часть массива начиная с позиции '''start''' и если указана переменная '''end''', то до нее не включая&lt;br /&gt;
&lt;br /&gt;
'''''splice(start, deleteCount)''''' - удаляет '''deleteCount''' элементов начиная с позиции '''start'''&lt;br /&gt;
&lt;br /&gt;
'''''clear()''''' - очистить массив&lt;br /&gt;
&lt;br /&gt;
Функции работы с массивом словарей:&lt;br /&gt;
&lt;br /&gt;
'''''find(EXPR)''''' - ищет элементы массива, удовлетворяющие условию '''EXPR'''. Найденные элементы возвращаются в виде массива&amp;lt;br&amp;gt;&lt;br /&gt;
Например:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''total(EXPR)''''' - применить выражение '''EXPR''' к каждому элементу массива и суммировать все значения&amp;lt;br&amp;gt;&lt;br /&gt;
Например посчитаем сумму товаров в корзине:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120, amount: 3},&lt;br /&gt;
  {title: &amp;quot;Pizza&amp;quot;, price: 100, amount: 2},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40, amount: 3},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.total(price * amount)   // для каждого элемента массива умножаем цену на количество и складываем результат&lt;br /&gt;
print(&amp;quot;К оплате: $res грн.&amp;quot;)            // выведет сумму товаров: &amp;quot;К оплате: 680 грн.&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''count(EXPR)''''' - найти количество элементов массива для которых истинно выражение '''EXPR'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120, amount: 3},&lt;br /&gt;
  {title: &amp;quot;Pizza&amp;quot;, price: 100, amount: 2},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40, amount: 3},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.count(price &amp;lt; 100)                            // для каждого элемента массива умножаем цену на количество и складываем результат&lt;br /&gt;
print(&amp;quot;Количество товаров, дешевле 100 грн: $res&amp;quot;)            // выведет количество товаров: &amp;quot;Количество товаров, дешевле 100 грн: 1&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {2+3}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экранирование спецсимволов '$','{','}' происходит путем добавления наклонной черты '\'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;price: 4.99\$ \{sale\}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)                       // выведет: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&lt;br /&gt;
'''''length''''' - получить длинну строки&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // вернет 5 - число символов строки &amp;quot;hello&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''substring(start,end)''''' - получить подстроку начиная с позиции '''start''' и до позиции '''end''' не включая&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;http://server/im.png&amp;quot;&lt;br /&gt;
substr = str.substring(7,13)  // вернет строку &amp;quot;server&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''search(pattern)''''' - найти позицию первого вхождения '''pattern''', иначе вернуть -1. Аргумент '''pattern''' может быть как строкой&lt;br /&gt;
так и регулярным выражением:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;apple orange juice&amp;quot;&lt;br /&gt;
res = str.search('orange')          // вернет позицию строки 'orange': 6&lt;br /&gt;
res = str.search(/(orange|juice)/)  // вернет позицию строки 'orange' или 'juice'&lt;br /&gt;
res = str.search('pizza')           // не найдет 'pizza' и вернет -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
Иногда удобно в цикле иметь и индекс массива, для этого перед переменной значения добавляем имя переменной индекса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(i, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$i: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
0: 3&lt;br /&gt;
1: 2&lt;br /&gt;
2: 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перебора ключей и значений словаря используется аналогичная конструкция:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = {pizza: 100, milk: 20, wine: 120}&lt;br /&gt;
for(key, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$key: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
pizza: 100&lt;br /&gt;
milk: 20&lt;br /&gt;
wine: 120&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-in&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''in''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор '''in''' проверяет есть ли значение в массиве либо является ключём в словаре.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;]             // массив&lt;br /&gt;
print(&amp;quot;hello&amp;quot; in sArr)               // вернет true, т.к. значение &amp;quot;hello&amp;quot; присутствует в массиве sArr &lt;br /&gt;
sDic = { price: 100, food: &amp;quot;Wine&amp;quot;}   // словарь&lt;br /&gt;
print(&amp;quot;food&amp;quot; in sDic)                // вернет true, т.к. ключ &amp;quot;food&amp;quot; присутствует в словаре sDic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
'''''button(caption){ SCRIPT }'''''&amp;lt;br&amp;gt;&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку с текстом '''caption''' в текущее сообщение. После нажатия на кнопку выполняется логика '''SCRIPT'''.&lt;br /&gt;
Если '''caption''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если '''obj''' - это сторока, то она выводится не зависимо от текущего языка. Если '''obj''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку. Если '''url''' - это строка, то он используется не зависимо от текущего языка. Если '''url''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.. Необязательный параметр '''width''' указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &lt;br /&gt;
image({ en: URL + &amp;quot;en.png&amp;quot;, ru: URL + &amp;quot;ru.png&amp;quot;}) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;дата-и-время&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Дата и время ==&lt;br /&gt;
&lt;br /&gt;
'''''date(format)''''' - возвращает текущую дату и время в указанном формате. По умолчанию аргумент '''format''' принимает значение '%d/%m/%Y %H:%M:%S'&lt;br /&gt;
&lt;br /&gt;
Поддерживаемые коды форматирования:&lt;br /&gt;
&lt;br /&gt;
* '''%y''' - год без столетия ('22')&lt;br /&gt;
* '''%Y''' - год ('2022')&lt;br /&gt;
* '''%m''' - месяц&lt;br /&gt;
* '''%d''' - день &lt;br /&gt;
* '''%H''' - часы &lt;br /&gt;
* '''%M''' - минуты &lt;br /&gt;
* '''%S''' - секунды &lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
date()  // 17/05/2022 18:16:31 т.е. сейчас&lt;br /&gt;
date('%Y.%m.%d %H:%M:%S')  // 2022.05.17 18:16:31&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=94</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=94"/>
		<updated>2022-05-24T06:56:54Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: /* Дата и время */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&lt;br /&gt;
sRegExp = /[abc]/                    // регулярное выражение&lt;br /&gt;
sNone = none                         // неопределенное значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также разрешается и питоновский стиль комментария:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 2253 # пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
'''''push(val1,val2...)''''' - добавить в конец массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.push(4) // добавить значение '4' в конец массива&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''unshift(val1,val2...)''''' - добавить в начало массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.unshift(0) // добавить значение '0' в начало&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''pop()''''' - удалить последний элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''shift()''''' - удалить первый элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''slice(start,end)''''' - возвращает часть массива начиная с позиции '''start''' и если указана переменная '''end''', то до нее не включая&lt;br /&gt;
&lt;br /&gt;
'''''splice(start, deleteCount)''''' - удаляет '''deleteCount''' элементов начиная с позиции '''start'''&lt;br /&gt;
&lt;br /&gt;
'''''clear()''''' - очистить массив&lt;br /&gt;
&lt;br /&gt;
Функции работы с массивом словарей:&lt;br /&gt;
&lt;br /&gt;
'''''find(EXPR)''''' - ищет элементы массива, удовлетворяющие условию '''EXPR'''. Найденные элементы возвращаются в виде массива&amp;lt;br&amp;gt;&lt;br /&gt;
Например:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''total(EXPR)''''' - применить выражение '''EXPR''' к каждому элементу массива и суммировать все значения&amp;lt;br&amp;gt;&lt;br /&gt;
Например посчитаем сумму товаров в корзине:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120, amount: 3},&lt;br /&gt;
  {title: &amp;quot;Pizza&amp;quot;, price: 100, amount: 2},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40, amount: 3},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.total(price * amount)   // для каждого элемента массива умножаем цену на количество и складываем результат&lt;br /&gt;
print(&amp;quot;К оплате: $res грн.&amp;quot;)            // выведет сумму товаров: &amp;quot;К оплате: 680 грн.&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''count(EXPR)''''' - найти количество элементов массива для которых истинно выражение '''EXPR'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120, amount: 3},&lt;br /&gt;
  {title: &amp;quot;Pizza&amp;quot;, price: 100, amount: 2},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40, amount: 3},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.count(price &amp;lt; 100)                            // для каждого элемента массива умножаем цену на количество и складываем результат&lt;br /&gt;
print(&amp;quot;Количество товаров, дешевле 100 грн: $res&amp;quot;)            // выведет количество товаров: &amp;quot;Количество товаров, дешевле 100 грн: 1&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {2+3}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экранирование спецсимволов '$','{','}' происходит путем добавления наклонной черты '\'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;price: 4.99\$ \{sale\}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)                       // выведет: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&lt;br /&gt;
'''''length''''' - получить длинну строки&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // вернет 5 - число символов строки &amp;quot;hello&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''substring(start,end)''''' - получить подстроку начиная с позиции '''start''' и до позиции '''end''' не включая&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;http://server/im.png&amp;quot;&lt;br /&gt;
substr = str.substring(7,13)  // вернет строку &amp;quot;server&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''search(pattern)''''' - найти позицию первого вхождения '''pattern''', иначе вернуть -1. Аргумент '''pattern''' может быть как строкой&lt;br /&gt;
так и регулярным выражением:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;apple orange juice&amp;quot;&lt;br /&gt;
res = str.search('orange')          // вернет позицию строки 'orange': 6&lt;br /&gt;
res = str.search(/(orange|juice)/)  // вернет позицию строки 'orange' или 'juice'&lt;br /&gt;
res = str.search('pizza')           // не найдет 'pizza' и вернет -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
Иногда удобно в цикле иметь и индекс массива, для этого перед переменной значения добавляем имя переменной индекса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(i, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$i: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
0: 3&lt;br /&gt;
1: 2&lt;br /&gt;
2: 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перебора ключей и значений словаря используется аналогичная конструкция:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = {pizza: 100, milk: 20, wine: 120}&lt;br /&gt;
for(key, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$key: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
pizza: 100&lt;br /&gt;
milk: 20&lt;br /&gt;
wine: 120&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-in&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''in''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор '''in''' проверяет есть ли значение в массиве либо является ключём в словаре.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;]             // массив&lt;br /&gt;
print(&amp;quot;hello&amp;quot; in sArr)               // вернет true, т.к. значение &amp;quot;hello&amp;quot; присутствует в массиве sArr &lt;br /&gt;
sDic = { price: 100, food: &amp;quot;Wine&amp;quot;}   // словарь&lt;br /&gt;
print(&amp;quot;food&amp;quot; in sDic)                // вернет true, т.к. ключ &amp;quot;food&amp;quot; присутствует в словаре sDic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
'''''button(caption){ SCRIPT }'''''&amp;lt;br&amp;gt;&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку с текстом '''caption''' в текущее сообщение. После нажатия на кнопку выполняется логика '''SCRIPT'''.&lt;br /&gt;
Если '''caption''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если '''obj''' - это сторока, то она выводится не зависимо от текущего языка. Если '''obj''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку. Если '''url''' - это строка, то он используется не зависимо от текущего языка. Если '''url''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.. Необязательный параметр '''width''' указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &lt;br /&gt;
image({ en: URL + &amp;quot;en.png&amp;quot;, ru: URL + &amp;quot;ru.png&amp;quot;}) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;дата-и-время&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Дата и время ==&lt;br /&gt;
&lt;br /&gt;
'''''date(format)''''' - возвращает текущую дату и время в указанном формате. По умолчанию аргумент format&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
date()  // 17/05/2022 18:16:31 т.е. сейчас&lt;br /&gt;
date('%Y.%m.%d %H:%M:%S')  // 2022.05.17 18:16:31&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=93</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=93"/>
		<updated>2022-05-24T06:53:53Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: /* Дата и время */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&lt;br /&gt;
sRegExp = /[abc]/                    // регулярное выражение&lt;br /&gt;
sNone = none                         // неопределенное значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также разрешается и питоновский стиль комментария:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 2253 # пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
'''''push(val1,val2...)''''' - добавить в конец массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.push(4) // добавить значение '4' в конец массива&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''unshift(val1,val2...)''''' - добавить в начало массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.unshift(0) // добавить значение '0' в начало&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''pop()''''' - удалить последний элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''shift()''''' - удалить первый элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''slice(start,end)''''' - возвращает часть массива начиная с позиции '''start''' и если указана переменная '''end''', то до нее не включая&lt;br /&gt;
&lt;br /&gt;
'''''splice(start, deleteCount)''''' - удаляет '''deleteCount''' элементов начиная с позиции '''start'''&lt;br /&gt;
&lt;br /&gt;
'''''clear()''''' - очистить массив&lt;br /&gt;
&lt;br /&gt;
Функции работы с массивом словарей:&lt;br /&gt;
&lt;br /&gt;
'''''find(EXPR)''''' - ищет элементы массива, удовлетворяющие условию '''EXPR'''. Найденные элементы возвращаются в виде массива&amp;lt;br&amp;gt;&lt;br /&gt;
Например:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''total(EXPR)''''' - применить выражение '''EXPR''' к каждому элементу массива и суммировать все значения&amp;lt;br&amp;gt;&lt;br /&gt;
Например посчитаем сумму товаров в корзине:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120, amount: 3},&lt;br /&gt;
  {title: &amp;quot;Pizza&amp;quot;, price: 100, amount: 2},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40, amount: 3},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.total(price * amount)   // для каждого элемента массива умножаем цену на количество и складываем результат&lt;br /&gt;
print(&amp;quot;К оплате: $res грн.&amp;quot;)            // выведет сумму товаров: &amp;quot;К оплате: 680 грн.&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''count(EXPR)''''' - найти количество элементов массива для которых истинно выражение '''EXPR'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120, amount: 3},&lt;br /&gt;
  {title: &amp;quot;Pizza&amp;quot;, price: 100, amount: 2},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40, amount: 3},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.count(price &amp;lt; 100)                            // для каждого элемента массива умножаем цену на количество и складываем результат&lt;br /&gt;
print(&amp;quot;Количество товаров, дешевле 100 грн: $res&amp;quot;)            // выведет количество товаров: &amp;quot;Количество товаров, дешевле 100 грн: 1&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {2+3}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экранирование спецсимволов '$','{','}' происходит путем добавления наклонной черты '\'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;price: 4.99\$ \{sale\}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)                       // выведет: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&lt;br /&gt;
'''''length''''' - получить длинну строки&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // вернет 5 - число символов строки &amp;quot;hello&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''substring(start,end)''''' - получить подстроку начиная с позиции '''start''' и до позиции '''end''' не включая&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;http://server/im.png&amp;quot;&lt;br /&gt;
substr = str.substring(7,13)  // вернет строку &amp;quot;server&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''search(pattern)''''' - найти позицию первого вхождения '''pattern''', иначе вернуть -1. Аргумент '''pattern''' может быть как строкой&lt;br /&gt;
так и регулярным выражением:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;apple orange juice&amp;quot;&lt;br /&gt;
res = str.search('orange')          // вернет позицию строки 'orange': 6&lt;br /&gt;
res = str.search(/(orange|juice)/)  // вернет позицию строки 'orange' или 'juice'&lt;br /&gt;
res = str.search('pizza')           // не найдет 'pizza' и вернет -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
Иногда удобно в цикле иметь и индекс массива, для этого перед переменной значения добавляем имя переменной индекса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(i, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$i: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
0: 3&lt;br /&gt;
1: 2&lt;br /&gt;
2: 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перебора ключей и значений словаря используется аналогичная конструкция:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = {pizza: 100, milk: 20, wine: 120}&lt;br /&gt;
for(key, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$key: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
pizza: 100&lt;br /&gt;
milk: 20&lt;br /&gt;
wine: 120&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-in&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''in''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор '''in''' проверяет есть ли значение в массиве либо является ключём в словаре.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;]             // массив&lt;br /&gt;
print(&amp;quot;hello&amp;quot; in sArr)               // вернет true, т.к. значение &amp;quot;hello&amp;quot; присутствует в массиве sArr &lt;br /&gt;
sDic = { price: 100, food: &amp;quot;Wine&amp;quot;}   // словарь&lt;br /&gt;
print(&amp;quot;food&amp;quot; in sDic)                // вернет true, т.к. ключ &amp;quot;food&amp;quot; присутствует в словаре sDic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
'''''button(caption){ SCRIPT }'''''&amp;lt;br&amp;gt;&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку с текстом '''caption''' в текущее сообщение. После нажатия на кнопку выполняется логика '''SCRIPT'''.&lt;br /&gt;
Если '''caption''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если '''obj''' - это сторока, то она выводится не зависимо от текущего языка. Если '''obj''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку. Если '''url''' - это строка, то он используется не зависимо от текущего языка. Если '''url''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.. Необязательный параметр '''width''' указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &lt;br /&gt;
image({ en: URL + &amp;quot;en.png&amp;quot;, ru: URL + &amp;quot;ru.png&amp;quot;}) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;дата-и-время&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Дата и время ==&lt;br /&gt;
&lt;br /&gt;
'''''date(format)''''' - возвращает текущую дату и время в указанном формате.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
date()  // 17/05/2022 18:16:31 т.е. сейчас&lt;br /&gt;
date('%Y.%m.%d %H:%M:%S')  // 2022.05.17 18:16:31&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=92</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=92"/>
		<updated>2022-05-24T06:53:30Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: /* Дата и время */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&lt;br /&gt;
sRegExp = /[abc]/                    // регулярное выражение&lt;br /&gt;
sNone = none                         // неопределенное значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также разрешается и питоновский стиль комментария:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 2253 # пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
'''''push(val1,val2...)''''' - добавить в конец массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.push(4) // добавить значение '4' в конец массива&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''unshift(val1,val2...)''''' - добавить в начало массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.unshift(0) // добавить значение '0' в начало&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''pop()''''' - удалить последний элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''shift()''''' - удалить первый элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''slice(start,end)''''' - возвращает часть массива начиная с позиции '''start''' и если указана переменная '''end''', то до нее не включая&lt;br /&gt;
&lt;br /&gt;
'''''splice(start, deleteCount)''''' - удаляет '''deleteCount''' элементов начиная с позиции '''start'''&lt;br /&gt;
&lt;br /&gt;
'''''clear()''''' - очистить массив&lt;br /&gt;
&lt;br /&gt;
Функции работы с массивом словарей:&lt;br /&gt;
&lt;br /&gt;
'''''find(EXPR)''''' - ищет элементы массива, удовлетворяющие условию '''EXPR'''. Найденные элементы возвращаются в виде массива&amp;lt;br&amp;gt;&lt;br /&gt;
Например:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''total(EXPR)''''' - применить выражение '''EXPR''' к каждому элементу массива и суммировать все значения&amp;lt;br&amp;gt;&lt;br /&gt;
Например посчитаем сумму товаров в корзине:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120, amount: 3},&lt;br /&gt;
  {title: &amp;quot;Pizza&amp;quot;, price: 100, amount: 2},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40, amount: 3},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.total(price * amount)   // для каждого элемента массива умножаем цену на количество и складываем результат&lt;br /&gt;
print(&amp;quot;К оплате: $res грн.&amp;quot;)            // выведет сумму товаров: &amp;quot;К оплате: 680 грн.&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''count(EXPR)''''' - найти количество элементов массива для которых истинно выражение '''EXPR'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120, amount: 3},&lt;br /&gt;
  {title: &amp;quot;Pizza&amp;quot;, price: 100, amount: 2},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40, amount: 3},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.count(price &amp;lt; 100)                            // для каждого элемента массива умножаем цену на количество и складываем результат&lt;br /&gt;
print(&amp;quot;Количество товаров, дешевле 100 грн: $res&amp;quot;)            // выведет количество товаров: &amp;quot;Количество товаров, дешевле 100 грн: 1&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {2+3}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экранирование спецсимволов '$','{','}' происходит путем добавления наклонной черты '\'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;price: 4.99\$ \{sale\}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)                       // выведет: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&lt;br /&gt;
'''''length''''' - получить длинну строки&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // вернет 5 - число символов строки &amp;quot;hello&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''substring(start,end)''''' - получить подстроку начиная с позиции '''start''' и до позиции '''end''' не включая&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;http://server/im.png&amp;quot;&lt;br /&gt;
substr = str.substring(7,13)  // вернет строку &amp;quot;server&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''search(pattern)''''' - найти позицию первого вхождения '''pattern''', иначе вернуть -1. Аргумент '''pattern''' может быть как строкой&lt;br /&gt;
так и регулярным выражением:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;apple orange juice&amp;quot;&lt;br /&gt;
res = str.search('orange')          // вернет позицию строки 'orange': 6&lt;br /&gt;
res = str.search(/(orange|juice)/)  // вернет позицию строки 'orange' или 'juice'&lt;br /&gt;
res = str.search('pizza')           // не найдет 'pizza' и вернет -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
Иногда удобно в цикле иметь и индекс массива, для этого перед переменной значения добавляем имя переменной индекса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(i, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$i: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
0: 3&lt;br /&gt;
1: 2&lt;br /&gt;
2: 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перебора ключей и значений словаря используется аналогичная конструкция:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = {pizza: 100, milk: 20, wine: 120}&lt;br /&gt;
for(key, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$key: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
pizza: 100&lt;br /&gt;
milk: 20&lt;br /&gt;
wine: 120&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-in&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''in''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор '''in''' проверяет есть ли значение в массиве либо является ключём в словаре.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;]             // массив&lt;br /&gt;
print(&amp;quot;hello&amp;quot; in sArr)               // вернет true, т.к. значение &amp;quot;hello&amp;quot; присутствует в массиве sArr &lt;br /&gt;
sDic = { price: 100, food: &amp;quot;Wine&amp;quot;}   // словарь&lt;br /&gt;
print(&amp;quot;food&amp;quot; in sDic)                // вернет true, т.к. ключ &amp;quot;food&amp;quot; присутствует в словаре sDic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
'''''button(caption){ SCRIPT }'''''&amp;lt;br&amp;gt;&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку с текстом '''caption''' в текущее сообщение. После нажатия на кнопку выполняется логика '''SCRIPT'''.&lt;br /&gt;
Если '''caption''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если '''obj''' - это сторока, то она выводится не зависимо от текущего языка. Если '''obj''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку. Если '''url''' - это строка, то он используется не зависимо от текущего языка. Если '''url''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.. Необязательный параметр '''width''' указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &lt;br /&gt;
image({ en: URL + &amp;quot;en.png&amp;quot;, ru: URL + &amp;quot;ru.png&amp;quot;}) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;дата-и-время&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Дата и время ==&lt;br /&gt;
&lt;br /&gt;
'''''date(format)''''' - возвращает текущую дату и время в указанном формате.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
date()  // 17/05/2022 18:16:31 т.е. сейчас&lt;br /&gt;
date('%Y:%m:%d %H:%M:%S')  // 2022:05:17 18:16:31&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=88</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=88"/>
		<updated>2022-04-18T09:42:41Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: /* Работа с массивами */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&lt;br /&gt;
sRegExp = /[abc]/                    // регулярное выражение&lt;br /&gt;
sNone = none                         // неопределенное значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также разрешается и питоновский стиль комментария:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 2253 # пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
'''''push(val1,val2...)''''' - добавить в конец массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.push(4) // добавить значение '4' в конец массива&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''unshift(val1,val2...)''''' - добавить в начало массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.unshift(0) // добавить значение '0' в начало&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''pop()''''' - удалить последний элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''shift()''''' - удалить первый элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''slice(start,end)''''' - возвращает часть массива начиная с позиции '''start''' и если указана переменная '''end''', то до нее не включая&lt;br /&gt;
&lt;br /&gt;
'''''splice(start, deleteCount)''''' - удаляет '''deleteCount''' элементов начиная с позиции '''start'''&lt;br /&gt;
&lt;br /&gt;
'''''clear()''''' - очистить массив&lt;br /&gt;
&lt;br /&gt;
Функции работы с массивом словарей:&lt;br /&gt;
&lt;br /&gt;
'''''find(EXPR)''''' - ищет элементы массива, удовлетворяющие условию '''EXPR'''. Найденные элементы возвращаются в виде массива&amp;lt;br&amp;gt;&lt;br /&gt;
Например:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''total(EXPR)''''' - применить выражение '''EXPR''' к каждому элементу массива и суммировать все значения&amp;lt;br&amp;gt;&lt;br /&gt;
Например посчитаем сумму товаров в корзине:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120, amount: 3},&lt;br /&gt;
  {title: &amp;quot;Pizza&amp;quot;, price: 100, amount: 2},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40, amount: 3},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.total(price * amount)   // для каждого элемента массива умножаем цену на количество и складываем результат&lt;br /&gt;
print(&amp;quot;К оплате: $res грн.&amp;quot;)            // выведет сумму товаров: &amp;quot;К оплате: 680 грн.&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''count(EXPR)''''' - найти количество элементов массива для которых истинно выражение '''EXPR'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120, amount: 3},&lt;br /&gt;
  {title: &amp;quot;Pizza&amp;quot;, price: 100, amount: 2},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40, amount: 3},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.count(price &amp;lt; 100)                            // для каждого элемента массива умножаем цену на количество и складываем результат&lt;br /&gt;
print(&amp;quot;Количество товаров, дешевле 100 грн: $res&amp;quot;)            // выведет количество товаров: &amp;quot;Количество товаров, дешевле 100 грн: 1&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {2+3}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экранирование спецсимволов '$','{','}' происходит путем добавления наклонной черты '\'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;price: 4.99\$ \{sale\}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)                       // выведет: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&lt;br /&gt;
'''''length''''' - получить длинну строки&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // вернет 5 - число символов строки &amp;quot;hello&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''substring(start,end)''''' - получить подстроку начиная с позиции '''start''' и до позиции '''end''' не включая&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;http://server/im.png&amp;quot;&lt;br /&gt;
substr = str.substring(7,13)  // вернет строку &amp;quot;server&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''search(pattern)''''' - найти позицию первого вхождения '''pattern''', иначе вернуть -1. Аргумент '''pattern''' может быть как строкой&lt;br /&gt;
так и регулярным выражением:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;apple orange juice&amp;quot;&lt;br /&gt;
res = str.search('orange')          // вернет позицию строки 'orange': 6&lt;br /&gt;
res = str.search(/(orange|juice)/)  // вернет позицию строки 'orange' или 'juice'&lt;br /&gt;
res = str.search('pizza')           // не найдет 'pizza' и вернет -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
Иногда удобно в цикле иметь и индекс массива, для этого перед переменной значения добавляем имя переменной индекса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(i, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$i: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
0: 3&lt;br /&gt;
1: 2&lt;br /&gt;
2: 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перебора ключей и значений словаря используется аналогичная конструкция:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = {pizza: 100, milk: 20, wine: 120}&lt;br /&gt;
for(key, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$key: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
pizza: 100&lt;br /&gt;
milk: 20&lt;br /&gt;
wine: 120&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-in&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''in''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор '''in''' проверяет есть ли значение в массиве либо является ключём в словаре.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;]             // массив&lt;br /&gt;
print(&amp;quot;hello&amp;quot; in sArr)               // вернет true, т.к. значение &amp;quot;hello&amp;quot; присутствует в массиве sArr &lt;br /&gt;
sDic = { price: 100, food: &amp;quot;Wine&amp;quot;}   // словарь&lt;br /&gt;
print(&amp;quot;food&amp;quot; in sDic)                // вернет true, т.к. ключ &amp;quot;food&amp;quot; присутствует в словаре sDic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
'''''button(caption){ SCRIPT }'''''&amp;lt;br&amp;gt;&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку с текстом '''caption''' в текущее сообщение. После нажатия на кнопку выполняется логика '''SCRIPT'''.&lt;br /&gt;
Если '''caption''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если '''obj''' - это сторока, то она выводится не зависимо от текущего языка. Если '''obj''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку. Если '''url''' - это строка, то он используется не зависимо от текущего языка. Если '''url''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.. Необязательный параметр '''width''' указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &lt;br /&gt;
image({ en: URL + &amp;quot;en.png&amp;quot;, ru: URL + &amp;quot;ru.png&amp;quot;}) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=87</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=87"/>
		<updated>2022-04-15T14:28:10Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: /* Работа с массивами */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&lt;br /&gt;
sRegExp = /[abc]/                    // регулярное выражение&lt;br /&gt;
sNone = none                         // неопределенное значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также разрешается и питоновский стиль комментария:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 2253 # пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
'''''push(val1,val2...)''''' - добавить в конец массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.push(4) // добавить значение '4' в конец массива&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''unshift(val1,val2...)''''' - добавить в начало массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.unshift(0) // добавить значение '0' в начало&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''pop()''''' - удалить последний элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''shift()''''' - удалить первый элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''slice(start,end)''''' - возвращает часть массива начиная с позиции '''start''' и если указана переменная '''end''', то до нее не включая&lt;br /&gt;
&lt;br /&gt;
'''''splice(start, deleteCount)''''' - удаляет '''deleteCount''' элементов начиная с позиции '''start'''&lt;br /&gt;
&lt;br /&gt;
'''''clear()''''' - очистить массив&lt;br /&gt;
&lt;br /&gt;
Функции работы с массивом словарей:&lt;br /&gt;
&lt;br /&gt;
'''''find(EXPR)''''' - ищет элементы массива, удовлетворяющие условию '''EXPR'''. Найденные элементы возвращаются в виде массива&amp;lt;br&amp;gt;&lt;br /&gt;
Например:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''total(EXPR)''''' - применить выражение '''EXPR''' к каждому элементу массива и суммировать все значения&amp;lt;br&amp;gt;&lt;br /&gt;
Например посчитаем сумму товаров в корзине:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120, amount: 3},&lt;br /&gt;
  {title: &amp;quot;Pizza&amp;quot;, price: 100, amount: 2},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40, amount: 3},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.total(price * amount)   // для каждого элемента массива умножаем цену на количество и складываем результат&lt;br /&gt;
print(&amp;quot;К оплате: $res грн.&amp;quot;)            // выведет сумму товаров: &amp;quot;К оплате: 680 грн.&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {2+3}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экранирование спецсимволов '$','{','}' происходит путем добавления наклонной черты '\'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;price: 4.99\$ \{sale\}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)                       // выведет: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&lt;br /&gt;
'''''length''''' - получить длинну строки&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // вернет 5 - число символов строки &amp;quot;hello&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''substring(start,end)''''' - получить подстроку начиная с позиции '''start''' и до позиции '''end''' не включая&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;http://server/im.png&amp;quot;&lt;br /&gt;
substr = str.substring(7,13)  // вернет строку &amp;quot;server&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''search(pattern)''''' - найти позицию первого вхождения '''pattern''', иначе вернуть -1. Аргумент '''pattern''' может быть как строкой&lt;br /&gt;
так и регулярным выражением:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;apple orange juice&amp;quot;&lt;br /&gt;
res = str.search('orange')          // вернет позицию строки 'orange': 6&lt;br /&gt;
res = str.search(/(orange|juice)/)  // вернет позицию строки 'orange' или 'juice'&lt;br /&gt;
res = str.search('pizza')           // не найдет 'pizza' и вернет -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
Иногда удобно в цикле иметь и индекс массива, для этого перед переменной значения добавляем имя переменной индекса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(i, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$i: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
0: 3&lt;br /&gt;
1: 2&lt;br /&gt;
2: 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перебора ключей и значений словаря используется аналогичная конструкция:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = {pizza: 100, milk: 20, wine: 120}&lt;br /&gt;
for(key, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$key: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
pizza: 100&lt;br /&gt;
milk: 20&lt;br /&gt;
wine: 120&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-in&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''in''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор '''in''' проверяет есть ли значение в массиве либо является ключём в словаре.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;]             // массив&lt;br /&gt;
print(&amp;quot;hello&amp;quot; in sArr)               // вернет true, т.к. значение &amp;quot;hello&amp;quot; присутствует в массиве sArr &lt;br /&gt;
sDic = { price: 100, food: &amp;quot;Wine&amp;quot;}   // словарь&lt;br /&gt;
print(&amp;quot;food&amp;quot; in sDic)                // вернет true, т.к. ключ &amp;quot;food&amp;quot; присутствует в словаре sDic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
'''''button(caption){ SCRIPT }'''''&amp;lt;br&amp;gt;&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку с текстом '''caption''' в текущее сообщение. После нажатия на кнопку выполняется логика '''SCRIPT'''.&lt;br /&gt;
Если '''caption''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если '''obj''' - это сторока, то она выводится не зависимо от текущего языка. Если '''obj''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку. Если '''url''' - это строка, то он используется не зависимо от текущего языка. Если '''url''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.. Необязательный параметр '''width''' указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &lt;br /&gt;
image({ en: URL + &amp;quot;en.png&amp;quot;, ru: URL + &amp;quot;ru.png&amp;quot;}) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=84</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=84"/>
		<updated>2022-04-14T07:37:21Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: /* Типы переменных */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&lt;br /&gt;
sRegExp = /[abc]/                    // регулярное выражение&lt;br /&gt;
sNone = none                         // неопределенное значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также разрешается и питоновский стиль комментария:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 2253 # пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
'''''push(val1,val2...)''''' - добавить в конец массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.push(4) // добавить значение '4' в конец массива&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''unshift(val1,val2...)''''' - добавить в начало массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.unshift(0) // добавить значение '0' в начало&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''pop()''''' - удалить последний элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''shift()''''' - удалить первый элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''slice(start,end)''''' - возвращает часть массива начиная с позиции '''start''' и если указана переменная '''end''', то до нее не включая&lt;br /&gt;
&lt;br /&gt;
'''''splice(start,end)''''' - удаляет часть массива начиная с позиции '''start''' и если указана переменная '''end''', то до нее не включая&lt;br /&gt;
&lt;br /&gt;
'''''clear()''''' - очистить массив&lt;br /&gt;
&lt;br /&gt;
Функции работы с массивом словарей:&lt;br /&gt;
&lt;br /&gt;
'''''find(EXPR)''''' - ищет элементы массива, удовлетворяющие условию '''EXPR'''. Найденные элементы возвращаются в виде массива&amp;lt;br&amp;gt;&lt;br /&gt;
Например:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''total(EXPR)''''' - применить выражение '''EXPR''' к каждому элементу массива и суммировать все значения&amp;lt;br&amp;gt;&lt;br /&gt;
Например посчитаем сумму товаров в корзине:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120, amount: 3},&lt;br /&gt;
  {title: &amp;quot;Pizza&amp;quot;, price: 100, amount: 2},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40, amount: 3},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.total(price * amount)   // для каждого элемента массива умножаем цену на количество и складываем результат&lt;br /&gt;
print(&amp;quot;К оплате: $res грн.&amp;quot;)            // выведет сумму товаров: &amp;quot;К оплате: 680 грн.&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {2+3}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экранирование спецсимволов '$','{','}' происходит путем добавления наклонной черты '\'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;price: 4.99\$ \{sale\}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)                       // выведет: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&lt;br /&gt;
'''''length''''' - получить длинну строки&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // вернет 5 - число символов строки &amp;quot;hello&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''substring(start,end)''''' - получить подстроку начиная с позиции '''start''' и до позиции '''end''' не включая&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;http://server/im.png&amp;quot;&lt;br /&gt;
substr = str.substring(7,13)  // вернет строку &amp;quot;server&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''search(pattern)''''' - найти позицию первого вхождения '''pattern''', иначе вернуть -1. Аргумент '''pattern''' может быть как строкой&lt;br /&gt;
так и регулярным выражением:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;apple orange juice&amp;quot;&lt;br /&gt;
res = str.search('orange')          // вернет позицию строки 'orange': 6&lt;br /&gt;
res = str.search(/(orange|juice)/)  // вернет позицию строки 'orange' или 'juice'&lt;br /&gt;
res = str.search('pizza')           // не найдет 'pizza' и вернет -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
Иногда удобно в цикле иметь и индекс массива, для этого перед переменной значения добавляем имя переменной индекса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(i, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$i: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
0: 3&lt;br /&gt;
1: 2&lt;br /&gt;
2: 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перебора ключей и значений словаря используется аналогичная конструкция:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = {pizza: 100, milk: 20, wine: 120}&lt;br /&gt;
for(key, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$key: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
pizza: 100&lt;br /&gt;
milk: 20&lt;br /&gt;
wine: 120&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-in&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''in''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор '''in''' проверяет есть ли значение в массиве либо является ключём в словаре.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;]             // массив&lt;br /&gt;
print(&amp;quot;hello&amp;quot; in sArr)               // вернет true, т.к. значение &amp;quot;hello&amp;quot; присутствует в массиве sArr &lt;br /&gt;
sDic = { price: 100, food: &amp;quot;Wine&amp;quot;}   // словарь&lt;br /&gt;
print(&amp;quot;food&amp;quot; in sDic)                // вернет true, т.к. ключ &amp;quot;food&amp;quot; присутствует в словаре sDic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
'''''button(caption){ SCRIPT }'''''&amp;lt;br&amp;gt;&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку с текстом '''caption''' в текущее сообщение. После нажатия на кнопку выполняется логика '''SCRIPT'''.&lt;br /&gt;
Если '''caption''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если '''obj''' - это сторока, то она выводится не зависимо от текущего языка. Если '''obj''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку. Если '''url''' - это строка, то он используется не зависимо от текущего языка. Если '''url''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.. Необязательный параметр '''width''' указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &lt;br /&gt;
image({ en: URL + &amp;quot;en.png&amp;quot;, ru: URL + &amp;quot;ru.png&amp;quot;}) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=83</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=83"/>
		<updated>2022-04-14T05:50:23Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: /* Работа с массивами */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&lt;br /&gt;
sRegExp = /[abc]/                    // регулярное выражение&lt;br /&gt;
sNull = null                         // неопределенное значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также разрешается и питоновский стиль комментария:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 2253 # пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
'''''push(val1,val2...)''''' - добавить в конец массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.push(4) // добавить значение '4' в конец массива&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''unshift(val1,val2...)''''' - добавить в начало массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.unshift(0) // добавить значение '0' в начало&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''pop()''''' - удалить последний элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''shift()''''' - удалить первый элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''slice(start,end)''''' - возвращает часть массива начиная с позиции '''start''' и если указана переменная '''end''', то до нее не включая&lt;br /&gt;
&lt;br /&gt;
'''''splice(start,end)''''' - удаляет часть массива начиная с позиции '''start''' и если указана переменная '''end''', то до нее не включая&lt;br /&gt;
&lt;br /&gt;
'''''clear()''''' - очистить массив&lt;br /&gt;
&lt;br /&gt;
Функции работы с массивом словарей:&lt;br /&gt;
&lt;br /&gt;
'''''find(EXPR)''''' - ищет элементы массива, удовлетворяющие условию '''EXPR'''. Найденные элементы возвращаются в виде массива&amp;lt;br&amp;gt;&lt;br /&gt;
Например:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''total(EXPR)''''' - применить выражение '''EXPR''' к каждому элементу массива и суммировать все значения&amp;lt;br&amp;gt;&lt;br /&gt;
Например посчитаем сумму товаров в корзине:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120, amount: 3},&lt;br /&gt;
  {title: &amp;quot;Pizza&amp;quot;, price: 100, amount: 2},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40, amount: 3},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.total(price * amount)   // для каждого элемента массива умножаем цену на количество и складываем результат&lt;br /&gt;
print(&amp;quot;К оплате: $res грн.&amp;quot;)            // выведет сумму товаров: &amp;quot;К оплате: 680 грн.&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {2+3}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экранирование спецсимволов '$','{','}' происходит путем добавления наклонной черты '\'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;price: 4.99\$ \{sale\}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)                       // выведет: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&lt;br /&gt;
'''''length''''' - получить длинну строки&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // вернет 5 - число символов строки &amp;quot;hello&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''substring(start,end)''''' - получить подстроку начиная с позиции '''start''' и до позиции '''end''' не включая&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;http://server/im.png&amp;quot;&lt;br /&gt;
substr = str.substring(7,13)  // вернет строку &amp;quot;server&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''search(pattern)''''' - найти позицию первого вхождения '''pattern''', иначе вернуть -1. Аргумент '''pattern''' может быть как строкой&lt;br /&gt;
так и регулярным выражением:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;apple orange juice&amp;quot;&lt;br /&gt;
res = str.search('orange')          // вернет позицию строки 'orange': 6&lt;br /&gt;
res = str.search(/(orange|juice)/)  // вернет позицию строки 'orange' или 'juice'&lt;br /&gt;
res = str.search('pizza')           // не найдет 'pizza' и вернет -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
Иногда удобно в цикле иметь и индекс массива, для этого перед переменной значения добавляем имя переменной индекса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(i, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$i: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
0: 3&lt;br /&gt;
1: 2&lt;br /&gt;
2: 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перебора ключей и значений словаря используется аналогичная конструкция:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = {pizza: 100, milk: 20, wine: 120}&lt;br /&gt;
for(key, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$key: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
pizza: 100&lt;br /&gt;
milk: 20&lt;br /&gt;
wine: 120&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-in&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''in''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор '''in''' проверяет есть ли значение в массиве либо является ключём в словаре.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;]             // массив&lt;br /&gt;
print(&amp;quot;hello&amp;quot; in sArr)               // вернет true, т.к. значение &amp;quot;hello&amp;quot; присутствует в массиве sArr &lt;br /&gt;
sDic = { price: 100, food: &amp;quot;Wine&amp;quot;}   // словарь&lt;br /&gt;
print(&amp;quot;food&amp;quot; in sDic)                // вернет true, т.к. ключ &amp;quot;food&amp;quot; присутствует в словаре sDic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
'''''button(caption){ SCRIPT }'''''&amp;lt;br&amp;gt;&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку с текстом '''caption''' в текущее сообщение. После нажатия на кнопку выполняется логика '''SCRIPT'''.&lt;br /&gt;
Если '''caption''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если '''obj''' - это сторока, то она выводится не зависимо от текущего языка. Если '''obj''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку. Если '''url''' - это строка, то он используется не зависимо от текущего языка. Если '''url''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.. Необязательный параметр '''width''' указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &lt;br /&gt;
image({ en: URL + &amp;quot;en.png&amp;quot;, ru: URL + &amp;quot;ru.png&amp;quot;}) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=82</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=82"/>
		<updated>2022-04-13T09:28:32Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: /* Типы переменных */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&lt;br /&gt;
sRegExp = /[abc]/                    // регулярное выражение&lt;br /&gt;
sNull = null                         // неопределенное значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также разрешается и питоновский стиль комментария:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 2253 # пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
'''''push(val1,val2...)''''' - добавить в конец массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.push(4) // добавить значение '4' в конец массива&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''unshift(val1,val2...)''''' - добавить в начало массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.unshift(0) // добавить значение '0' в начало&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''pop()''''' - удалить последний элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''shift()''''' - удалить первый элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''slice(start,end)''''' - возвращает часть массива начиная с позиции '''start''' и если указана переменная '''end''', то до нее не включая&lt;br /&gt;
&lt;br /&gt;
'''''splice(start,end)''''' - удаляет часть массива начиная с позиции '''start''' и если указана переменная '''end''', то до нее не включая&lt;br /&gt;
&lt;br /&gt;
Функции работы с массивом словарей:&lt;br /&gt;
&lt;br /&gt;
'''''find(EXPR)''''' - ищет элементы массива, удовлетворяющие условию '''EXPR'''. Найденные элементы возвращаются в виде массива&amp;lt;br&amp;gt;&lt;br /&gt;
Например:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''total(EXPR)''''' - применить выражение '''EXPR''' к каждому элементу массива и суммировать все значения&amp;lt;br&amp;gt;&lt;br /&gt;
Например посчитаем сумму товаров в корзине:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120, amount: 3},&lt;br /&gt;
  {title: &amp;quot;Pizza&amp;quot;, price: 100, amount: 2},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40, amount: 3},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.total(price * amount)   // для каждого элемента массива умножаем цену на количество и складываем результат&lt;br /&gt;
print(&amp;quot;К оплате: $res грн.&amp;quot;)            // выведет сумму товаров: &amp;quot;К оплате: 680 грн.&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {2+3}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экранирование спецсимволов '$','{','}' происходит путем добавления наклонной черты '\'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;price: 4.99\$ \{sale\}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)                       // выведет: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&lt;br /&gt;
'''''length''''' - получить длинну строки&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // вернет 5 - число символов строки &amp;quot;hello&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''substring(start,end)''''' - получить подстроку начиная с позиции '''start''' и до позиции '''end''' не включая&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;http://server/im.png&amp;quot;&lt;br /&gt;
substr = str.substring(7,13)  // вернет строку &amp;quot;server&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''search(pattern)''''' - найти позицию первого вхождения '''pattern''', иначе вернуть -1. Аргумент '''pattern''' может быть как строкой&lt;br /&gt;
так и регулярным выражением:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;apple orange juice&amp;quot;&lt;br /&gt;
res = str.search('orange')          // вернет позицию строки 'orange': 6&lt;br /&gt;
res = str.search(/(orange|juice)/)  // вернет позицию строки 'orange' или 'juice'&lt;br /&gt;
res = str.search('pizza')           // не найдет 'pizza' и вернет -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
Иногда удобно в цикле иметь и индекс массива, для этого перед переменной значения добавляем имя переменной индекса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(i, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$i: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
0: 3&lt;br /&gt;
1: 2&lt;br /&gt;
2: 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перебора ключей и значений словаря используется аналогичная конструкция:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = {pizza: 100, milk: 20, wine: 120}&lt;br /&gt;
for(key, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$key: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
pizza: 100&lt;br /&gt;
milk: 20&lt;br /&gt;
wine: 120&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-in&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''in''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор '''in''' проверяет есть ли значение в массиве либо является ключём в словаре.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;]             // массив&lt;br /&gt;
print(&amp;quot;hello&amp;quot; in sArr)               // вернет true, т.к. значение &amp;quot;hello&amp;quot; присутствует в массиве sArr &lt;br /&gt;
sDic = { price: 100, food: &amp;quot;Wine&amp;quot;}   // словарь&lt;br /&gt;
print(&amp;quot;food&amp;quot; in sDic)                // вернет true, т.к. ключ &amp;quot;food&amp;quot; присутствует в словаре sDic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
'''''button(caption){ SCRIPT }'''''&amp;lt;br&amp;gt;&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку с текстом '''caption''' в текущее сообщение. После нажатия на кнопку выполняется логика '''SCRIPT'''.&lt;br /&gt;
Если '''caption''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если '''obj''' - это сторока, то она выводится не зависимо от текущего языка. Если '''obj''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку. Если '''url''' - это строка, то он используется не зависимо от текущего языка. Если '''url''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.. Необязательный параметр '''width''' указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &lt;br /&gt;
image({ en: URL + &amp;quot;en.png&amp;quot;, ru: URL + &amp;quot;ru.png&amp;quot;}) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=81</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=81"/>
		<updated>2022-04-08T17:32:18Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: /* Работа с массивами */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&lt;br /&gt;
sRegExp = /[abc]/                    // регулярное выражение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также разрешается и питоновский стиль комментария:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 2253 # пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
'''''push(val1,val2...)''''' - добавить в конец массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.push(4) // добавить значение '4' в конец массива&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''unshift(val1,val2...)''''' - добавить в начало массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.unshift(0) // добавить значение '0' в начало&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''pop()''''' - удалить последний элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''shift()''''' - удалить первый элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''slice(start,end)''''' - возвращает часть массива начиная с позиции '''start''' и если указана переменная '''end''', то до нее не включая&lt;br /&gt;
&lt;br /&gt;
'''''splice(start,end)''''' - удаляет часть массива начиная с позиции '''start''' и если указана переменная '''end''', то до нее не включая&lt;br /&gt;
&lt;br /&gt;
Функции работы с массивом словарей:&lt;br /&gt;
&lt;br /&gt;
'''''find(EXPR)''''' - ищет элементы массива, удовлетворяющие условию '''EXPR'''. Найденные элементы возвращаются в виде массива&amp;lt;br&amp;gt;&lt;br /&gt;
Например:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''total(EXPR)''''' - применить выражение '''EXPR''' к каждому элементу массива и суммировать все значения&amp;lt;br&amp;gt;&lt;br /&gt;
Например посчитаем сумму товаров в корзине:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120, amount: 3},&lt;br /&gt;
  {title: &amp;quot;Pizza&amp;quot;, price: 100, amount: 2},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40, amount: 3},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.total(price * amount)   // для каждого элемента массива умножаем цену на количество и складываем результат&lt;br /&gt;
print(&amp;quot;К оплате: $res грн.&amp;quot;)            // выведет сумму товаров: &amp;quot;К оплате: 680 грн.&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {2+3}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экранирование спецсимволов '$','{','}' происходит путем добавления наклонной черты '\'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;price: 4.99\$ \{sale\}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)                       // выведет: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&lt;br /&gt;
'''''length''''' - получить длинну строки&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // вернет 5 - число символов строки &amp;quot;hello&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''substring(start,end)''''' - получить подстроку начиная с позиции '''start''' и до позиции '''end''' не включая&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;http://server/im.png&amp;quot;&lt;br /&gt;
substr = str.substring(7,13)  // вернет строку &amp;quot;server&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''search(pattern)''''' - найти позицию первого вхождения '''pattern''', иначе вернуть -1. Аргумент '''pattern''' может быть как строкой&lt;br /&gt;
так и регулярным выражением:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;apple orange juice&amp;quot;&lt;br /&gt;
res = str.search('orange')          // вернет позицию строки 'orange': 6&lt;br /&gt;
res = str.search(/(orange|juice)/)  // вернет позицию строки 'orange' или 'juice'&lt;br /&gt;
res = str.search('pizza')           // не найдет 'pizza' и вернет -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
Иногда удобно в цикле иметь и индекс массива, для этого перед переменной значения добавляем имя переменной индекса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(i, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$i: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
0: 3&lt;br /&gt;
1: 2&lt;br /&gt;
2: 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перебора ключей и значений словаря используется аналогичная конструкция:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = {pizza: 100, milk: 20, wine: 120}&lt;br /&gt;
for(key, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$key: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
pizza: 100&lt;br /&gt;
milk: 20&lt;br /&gt;
wine: 120&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-in&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''in''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор '''in''' проверяет есть ли значение в массиве либо является ключём в словаре.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;]             // массив&lt;br /&gt;
print(&amp;quot;hello&amp;quot; in sArr)               // вернет true, т.к. значение &amp;quot;hello&amp;quot; присутствует в массиве sArr &lt;br /&gt;
sDic = { price: 100, food: &amp;quot;Wine&amp;quot;}   // словарь&lt;br /&gt;
print(&amp;quot;food&amp;quot; in sDic)                // вернет true, т.к. ключ &amp;quot;food&amp;quot; присутствует в словаре sDic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
'''''button(caption){ SCRIPT }'''''&amp;lt;br&amp;gt;&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку с текстом '''caption''' в текущее сообщение. После нажатия на кнопку выполняется логика '''SCRIPT'''.&lt;br /&gt;
Если '''caption''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если '''obj''' - это сторока, то она выводится не зависимо от текущего языка. Если '''obj''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку. Если '''url''' - это строка, то он используется не зависимо от текущего языка. Если '''url''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.. Необязательный параметр '''width''' указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &lt;br /&gt;
image({ en: URL + &amp;quot;en.png&amp;quot;, ru: URL + &amp;quot;ru.png&amp;quot;}) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=80</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=80"/>
		<updated>2022-04-08T17:31:26Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: /* Работа с массивами */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&lt;br /&gt;
sRegExp = /[abc]/                    // регулярное выражение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также разрешается и питоновский стиль комментария:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 2253 # пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
'''''push(val1,val2...)''''' - добавить в конец массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.push(4) // добавить значение '4' в конец массива&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''unshift(val1,val2...)''''' - добавить в начало массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.unshift(0) // добавить значение '0' в начало&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''pop()''''' - удалить последний элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''shift()''''' - удалить первый элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''slice(start,end)''''' - возвращает часть массива начиная с позиции '''start''' и если указана переменная '''end''', то до нее не включая&lt;br /&gt;
&lt;br /&gt;
'''''splice(start,end)''''' - удаляет часть массива начиная с позиции '''start''' и если указана переменная '''end''', то до нее не включая&lt;br /&gt;
&lt;br /&gt;
Функции работы с массивом словарей:&lt;br /&gt;
&lt;br /&gt;
'''''find(EXPR)''''' - ищет элементы массива, удовлетворяющие условию '''EXPR'''. Найденные элементы возвращаются в виде массива&amp;lt;br&amp;gt;&lt;br /&gt;
Например:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''total(EXPR)''''' - применить выражение '''EXPR''' к каждому элементу массива и суммировать все значения&amp;lt;br&amp;gt;&lt;br /&gt;
Например посчитаем сумму товаров в корзине:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120, amount: 3},&lt;br /&gt;
  {title: &amp;quot;Pizza&amp;quot;, price: 100, amount: 2},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40, amount: 3},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.total(price * amount)   // для каждого элемента массива умножаем цену на количество и складываем результат&lt;br /&gt;
print(&amp;quot;К оплате: $res грн.&amp;quot;)            // выведет сумму товаров &amp;quot;К оплате: 680 грн.&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {2+3}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экранирование спецсимволов '$','{','}' происходит путем добавления наклонной черты '\'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;price: 4.99\$ \{sale\}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)                       // выведет: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&lt;br /&gt;
'''''length''''' - получить длинну строки&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // вернет 5 - число символов строки &amp;quot;hello&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''substring(start,end)''''' - получить подстроку начиная с позиции '''start''' и до позиции '''end''' не включая&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;http://server/im.png&amp;quot;&lt;br /&gt;
substr = str.substring(7,13)  // вернет строку &amp;quot;server&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''search(pattern)''''' - найти позицию первого вхождения '''pattern''', иначе вернуть -1. Аргумент '''pattern''' может быть как строкой&lt;br /&gt;
так и регулярным выражением:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;apple orange juice&amp;quot;&lt;br /&gt;
res = str.search('orange')          // вернет позицию строки 'orange': 6&lt;br /&gt;
res = str.search(/(orange|juice)/)  // вернет позицию строки 'orange' или 'juice'&lt;br /&gt;
res = str.search('pizza')           // не найдет 'pizza' и вернет -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
Иногда удобно в цикле иметь и индекс массива, для этого перед переменной значения добавляем имя переменной индекса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(i, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$i: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
0: 3&lt;br /&gt;
1: 2&lt;br /&gt;
2: 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перебора ключей и значений словаря используется аналогичная конструкция:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = {pizza: 100, milk: 20, wine: 120}&lt;br /&gt;
for(key, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$key: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
pizza: 100&lt;br /&gt;
milk: 20&lt;br /&gt;
wine: 120&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-in&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''in''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор '''in''' проверяет есть ли значение в массиве либо является ключём в словаре.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;]             // массив&lt;br /&gt;
print(&amp;quot;hello&amp;quot; in sArr)               // вернет true, т.к. значение &amp;quot;hello&amp;quot; присутствует в массиве sArr &lt;br /&gt;
sDic = { price: 100, food: &amp;quot;Wine&amp;quot;}   // словарь&lt;br /&gt;
print(&amp;quot;food&amp;quot; in sDic)                // вернет true, т.к. ключ &amp;quot;food&amp;quot; присутствует в словаре sDic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
'''''button(caption){ SCRIPT }'''''&amp;lt;br&amp;gt;&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку с текстом '''caption''' в текущее сообщение. После нажатия на кнопку выполняется логика '''SCRIPT'''.&lt;br /&gt;
Если '''caption''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если '''obj''' - это сторока, то она выводится не зависимо от текущего языка. Если '''obj''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку. Если '''url''' - это строка, то он используется не зависимо от текущего языка. Если '''url''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.. Необязательный параметр '''width''' указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &lt;br /&gt;
image({ en: URL + &amp;quot;en.png&amp;quot;, ru: URL + &amp;quot;ru.png&amp;quot;}) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=79</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=79"/>
		<updated>2022-04-08T17:23:07Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: /* Работа со строками */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&lt;br /&gt;
sRegExp = /[abc]/                    // регулярное выражение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также разрешается и питоновский стиль комментария:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 2253 # пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
'''''push(val1,val2...)''''' - добавить в конец массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.push(4) // добавить значение '4' в конец массива&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''unshift(val1,val2...)''''' - добавить в начало массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.unshift(0) // добавить значение '0' в начало&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''pop()''''' - удалить последний элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''shift()''''' - удалить первый элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''slice(start,end)''''' - возвращает часть массива начиная с позиции '''start''' и если указана переменная '''end''', то до нее не включая&lt;br /&gt;
&lt;br /&gt;
'''''splice()''''' - удаляет часть массива начиная с позиции '''start''' и если указана переменная '''end''', то до нее не включая&lt;br /&gt;
&lt;br /&gt;
Функции работы с массивом словарей:&lt;br /&gt;
&lt;br /&gt;
'''''find(EXPR)''''' - ищет элементы массива, удовлетворяющие условию '''EXPR'''. Найденные элементы возвращаются в виде массива&amp;lt;br&amp;gt;&lt;br /&gt;
Например:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''total(EXPR)''''' - применить выражение '''EXPR''' к каждому элементу массива и суммировать все значения&amp;lt;br&amp;gt;&lt;br /&gt;
Например посчитаем сумму товаров в корзине:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120, amount: 3},&lt;br /&gt;
  {title: &amp;quot;Pizza&amp;quot;, price: 100, amount: 2},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40, amount: 3},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.total(price * amount)   // для каждого элемента массива умножаем цену на количество и складываем результат&lt;br /&gt;
print(&amp;quot;К оплате: $res грн.&amp;quot;)            // выведет сумму товаров &amp;quot;К оплате: 680 грн.&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {2+3}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экранирование спецсимволов '$','{','}' происходит путем добавления наклонной черты '\'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;price: 4.99\$ \{sale\}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)                       // выведет: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&lt;br /&gt;
'''''length''''' - получить длинну строки&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // вернет 5 - число символов строки &amp;quot;hello&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''substring(start,end)''''' - получить подстроку начиная с позиции '''start''' и до позиции '''end''' не включая&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;http://server/im.png&amp;quot;&lt;br /&gt;
substr = str.substring(7,13)  // вернет строку &amp;quot;server&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''search(pattern)''''' - найти позицию первого вхождения '''pattern''', иначе вернуть -1. Аргумент '''pattern''' может быть как строкой&lt;br /&gt;
так и регулярным выражением:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;apple orange juice&amp;quot;&lt;br /&gt;
res = str.search('orange')          // вернет позицию строки 'orange': 6&lt;br /&gt;
res = str.search(/(orange|juice)/)  // вернет позицию строки 'orange' или 'juice'&lt;br /&gt;
res = str.search('pizza')           // не найдет 'pizza' и вернет -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
Иногда удобно в цикле иметь и индекс массива, для этого перед переменной значения добавляем имя переменной индекса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(i, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$i: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
0: 3&lt;br /&gt;
1: 2&lt;br /&gt;
2: 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перебора ключей и значений словаря используется аналогичная конструкция:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = {pizza: 100, milk: 20, wine: 120}&lt;br /&gt;
for(key, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$key: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
pizza: 100&lt;br /&gt;
milk: 20&lt;br /&gt;
wine: 120&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-in&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''in''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор '''in''' проверяет есть ли значение в массиве либо является ключём в словаре.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;]             // массив&lt;br /&gt;
print(&amp;quot;hello&amp;quot; in sArr)               // вернет true, т.к. значение &amp;quot;hello&amp;quot; присутствует в массиве sArr &lt;br /&gt;
sDic = { price: 100, food: &amp;quot;Wine&amp;quot;}   // словарь&lt;br /&gt;
print(&amp;quot;food&amp;quot; in sDic)                // вернет true, т.к. ключ &amp;quot;food&amp;quot; присутствует в словаре sDic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
'''''button(caption){ SCRIPT }'''''&amp;lt;br&amp;gt;&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку с текстом '''caption''' в текущее сообщение. После нажатия на кнопку выполняется логика '''SCRIPT'''.&lt;br /&gt;
Если '''caption''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если '''obj''' - это сторока, то она выводится не зависимо от текущего языка. Если '''obj''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку. Если '''url''' - это строка, то он используется не зависимо от текущего языка. Если '''url''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.. Необязательный параметр '''width''' указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &lt;br /&gt;
image({ en: URL + &amp;quot;en.png&amp;quot;, ru: URL + &amp;quot;ru.png&amp;quot;}) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=78</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=78"/>
		<updated>2022-04-08T17:22:17Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: /* Работа со строками */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&lt;br /&gt;
sRegExp = /[abc]/                    // регулярное выражение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также разрешается и питоновский стиль комментария:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 2253 # пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
'''''push(val1,val2...)''''' - добавить в конец массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.push(4) // добавить значение '4' в конец массива&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''unshift(val1,val2...)''''' - добавить в начало массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.unshift(0) // добавить значение '0' в начало&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''pop()''''' - удалить последний элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''shift()''''' - удалить первый элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''slice(start,end)''''' - возвращает часть массива начиная с позиции '''start''' и если указана переменная '''end''', то до нее не включая&lt;br /&gt;
&lt;br /&gt;
'''''splice()''''' - удаляет часть массива начиная с позиции '''start''' и если указана переменная '''end''', то до нее не включая&lt;br /&gt;
&lt;br /&gt;
Функции работы с массивом словарей:&lt;br /&gt;
&lt;br /&gt;
'''''find(EXPR)''''' - ищет элементы массива, удовлетворяющие условию '''EXPR'''. Найденные элементы возвращаются в виде массива&amp;lt;br&amp;gt;&lt;br /&gt;
Например:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''total(EXPR)''''' - применить выражение '''EXPR''' к каждому элементу массива и суммировать все значения&amp;lt;br&amp;gt;&lt;br /&gt;
Например посчитаем сумму товаров в корзине:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120, amount: 3},&lt;br /&gt;
  {title: &amp;quot;Pizza&amp;quot;, price: 100, amount: 2},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40, amount: 3},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.total(price * amount)   // для каждого элемента массива умножаем цену на количество и складываем результат&lt;br /&gt;
print(&amp;quot;К оплате: $res грн.&amp;quot;)            // выведет сумму товаров &amp;quot;К оплате: 680 грн.&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {2+3}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экранирование спецсимволов '$','{','}' происходит путем добавления наклонной черты '\'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;price: 4.99\$ \{sale\}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)                       // выведет: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&lt;br /&gt;
'''''length''''' - получить длинну строки&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // вернет 5 - число символов строки &amp;quot;hello&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''substring(start,end)''''' - получить подстроку начиная с позиции '''start''' и до позиции '''end''' не включая&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;http://server/im.png&amp;quot;&lt;br /&gt;
substr = str.substring(7,13)  // вернет строку &amp;quot;server&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''search(pattern)''''' - найти позицию первого вхождения '''pattern''', иначе вернуть -1. Аргумент '''pattern''' может быть как строкой&lt;br /&gt;
так и регулярным выражением:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;apple orange juice&amp;quot;&lt;br /&gt;
res = str.search('orange')          // вернет позицию строки 'orange'&lt;br /&gt;
res = str.search(/(orange|juice)/)  // вернет позицию строки 'orange' или 'juice'&lt;br /&gt;
res = str.search('pizza')           // не найдет 'pizza' и вернет -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
Иногда удобно в цикле иметь и индекс массива, для этого перед переменной значения добавляем имя переменной индекса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(i, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$i: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
0: 3&lt;br /&gt;
1: 2&lt;br /&gt;
2: 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перебора ключей и значений словаря используется аналогичная конструкция:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = {pizza: 100, milk: 20, wine: 120}&lt;br /&gt;
for(key, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$key: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
pizza: 100&lt;br /&gt;
milk: 20&lt;br /&gt;
wine: 120&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-in&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''in''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор '''in''' проверяет есть ли значение в массиве либо является ключём в словаре.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;]             // массив&lt;br /&gt;
print(&amp;quot;hello&amp;quot; in sArr)               // вернет true, т.к. значение &amp;quot;hello&amp;quot; присутствует в массиве sArr &lt;br /&gt;
sDic = { price: 100, food: &amp;quot;Wine&amp;quot;}   // словарь&lt;br /&gt;
print(&amp;quot;food&amp;quot; in sDic)                // вернет true, т.к. ключ &amp;quot;food&amp;quot; присутствует в словаре sDic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
'''''button(caption){ SCRIPT }'''''&amp;lt;br&amp;gt;&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку с текстом '''caption''' в текущее сообщение. После нажатия на кнопку выполняется логика '''SCRIPT'''.&lt;br /&gt;
Если '''caption''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если '''obj''' - это сторока, то она выводится не зависимо от текущего языка. Если '''obj''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку. Если '''url''' - это строка, то он используется не зависимо от текущего языка. Если '''url''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.. Необязательный параметр '''width''' указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &lt;br /&gt;
image({ en: URL + &amp;quot;en.png&amp;quot;, ru: URL + &amp;quot;ru.png&amp;quot;}) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=77</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=77"/>
		<updated>2022-04-08T17:06:21Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: /* Работа с массивами */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&lt;br /&gt;
sRegExp = /[abc]/                    // регулярное выражение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также разрешается и питоновский стиль комментария:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 2253 # пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
'''''push(val1,val2...)''''' - добавить в конец массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.push(4) // добавить значение '4' в конец массива&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''unshift(val1,val2...)''''' - добавить в начало массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.unshift(0) // добавить значение '0' в начало&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''pop()''''' - удалить последний элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''shift()''''' - удалить первый элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''slice(start,end)''''' - возвращает часть массива начиная с позиции '''start''' и если указана переменная '''end''', то до нее не включая&lt;br /&gt;
&lt;br /&gt;
'''''splice()''''' - удаляет часть массива начиная с позиции '''start''' и если указана переменная '''end''', то до нее не включая&lt;br /&gt;
&lt;br /&gt;
Функции работы с массивом словарей:&lt;br /&gt;
&lt;br /&gt;
'''''find(EXPR)''''' - ищет элементы массива, удовлетворяющие условию '''EXPR'''. Найденные элементы возвращаются в виде массива&amp;lt;br&amp;gt;&lt;br /&gt;
Например:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''total(EXPR)''''' - применить выражение '''EXPR''' к каждому элементу массива и суммировать все значения&amp;lt;br&amp;gt;&lt;br /&gt;
Например посчитаем сумму товаров в корзине:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120, amount: 3},&lt;br /&gt;
  {title: &amp;quot;Pizza&amp;quot;, price: 100, amount: 2},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40, amount: 3},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.total(price * amount)   // для каждого элемента массива умножаем цену на количество и складываем результат&lt;br /&gt;
print(&amp;quot;К оплате: $res грн.&amp;quot;)            // выведет сумму товаров &amp;quot;К оплате: 680 грн.&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {2+3}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экранирование спецсимволов '$','{','}' происходит путем добавления наклонной черты '\'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;price: 4.99\$ \{sale\}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)                       // выведет: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // получить длинну строки&lt;br /&gt;
sub = str.substring(3,5)   // получить подстроку начиная с 3-й позиции и до 5-й не включая&lt;br /&gt;
pos = str.search('lo')     // получить позицию подстроки, иначе -1&lt;br /&gt;
pos = str.search(/lo/)     // получить позицию подстроки используя регулярное выражение, иначе -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
Иногда удобно в цикле иметь и индекс массива, для этого перед переменной значения добавляем имя переменной индекса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(i, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$i: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
0: 3&lt;br /&gt;
1: 2&lt;br /&gt;
2: 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перебора ключей и значений словаря используется аналогичная конструкция:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = {pizza: 100, milk: 20, wine: 120}&lt;br /&gt;
for(key, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$key: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
pizza: 100&lt;br /&gt;
milk: 20&lt;br /&gt;
wine: 120&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-in&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''in''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор '''in''' проверяет есть ли значение в массиве либо является ключём в словаре.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;]             // массив&lt;br /&gt;
print(&amp;quot;hello&amp;quot; in sArr)               // вернет true, т.к. значение &amp;quot;hello&amp;quot; присутствует в массиве sArr &lt;br /&gt;
sDic = { price: 100, food: &amp;quot;Wine&amp;quot;}   // словарь&lt;br /&gt;
print(&amp;quot;food&amp;quot; in sDic)                // вернет true, т.к. ключ &amp;quot;food&amp;quot; присутствует в словаре sDic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
'''''button(caption){ SCRIPT }'''''&amp;lt;br&amp;gt;&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку с текстом '''caption''' в текущее сообщение. После нажатия на кнопку выполняется логика '''SCRIPT'''.&lt;br /&gt;
Если '''caption''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если '''obj''' - это сторока, то она выводится не зависимо от текущего языка. Если '''obj''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку. Если '''url''' - это строка, то он используется не зависимо от текущего языка. Если '''url''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.. Необязательный параметр '''width''' указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &lt;br /&gt;
image({ en: URL + &amp;quot;en.png&amp;quot;, ru: URL + &amp;quot;ru.png&amp;quot;}) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=76</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=76"/>
		<updated>2022-04-08T17:05:36Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: /* Работа с массивами */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&lt;br /&gt;
sRegExp = /[abc]/                    // регулярное выражение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также разрешается и питоновский стиль комментария:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 2253 # пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
'''''push(val1,val2...)''''' - добавить в конец массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.push(4) // добавить значение '4' в конец массива&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''unshift(val1,val2...)''''' - добавить в начало массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.unshift(0) // добавить значение '0' в начало&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''pop()''''' - удалить последний элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''shift()''''' - удалить первый элемент массива и вернуть его значение&lt;br /&gt;
&lt;br /&gt;
'''''slice(start,end)''''' - возвращает часть массива начиная с позиции '''start''' и если указана переменная '''end''', то до нее не включая&lt;br /&gt;
&lt;br /&gt;
'''''splice()''''' - удаляет часть массива начиная с позиции '''start''' и если указана переменная '''end''', то до нее не включая&lt;br /&gt;
&lt;br /&gt;
Функции работы с массивом словарей:&lt;br /&gt;
&lt;br /&gt;
'''''find(EXPR)''''' - ищет элементы массива, удовлетворяющие условию '''EXPR'''. Найденные элементы возвращаются в виде массива&lt;br /&gt;
Например:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''total(EXPR)''''' - применить выражение '''EXPR''' к каждому элементу массива и суммировать все значения&lt;br /&gt;
Например посчитаем сумму товаров в корзине:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120, amount: 3},&lt;br /&gt;
  {title: &amp;quot;Pizza&amp;quot;, price: 100, amount: 2},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40, amount: 3},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.total(price * amount)   // для каждого элемента массива умножаем цену на количество и складываем результат&lt;br /&gt;
print(&amp;quot;К оплате: $res грн.&amp;quot;)            // выведет сумму товаров &amp;quot;К оплате: 680 грн.&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {2+3}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экранирование спецсимволов '$','{','}' происходит путем добавления наклонной черты '\'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;price: 4.99\$ \{sale\}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)                       // выведет: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // получить длинну строки&lt;br /&gt;
sub = str.substring(3,5)   // получить подстроку начиная с 3-й позиции и до 5-й не включая&lt;br /&gt;
pos = str.search('lo')     // получить позицию подстроки, иначе -1&lt;br /&gt;
pos = str.search(/lo/)     // получить позицию подстроки используя регулярное выражение, иначе -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
Иногда удобно в цикле иметь и индекс массива, для этого перед переменной значения добавляем имя переменной индекса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(i, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$i: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
0: 3&lt;br /&gt;
1: 2&lt;br /&gt;
2: 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перебора ключей и значений словаря используется аналогичная конструкция:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = {pizza: 100, milk: 20, wine: 120}&lt;br /&gt;
for(key, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$key: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
pizza: 100&lt;br /&gt;
milk: 20&lt;br /&gt;
wine: 120&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-in&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''in''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор '''in''' проверяет есть ли значение в массиве либо является ключём в словаре.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;]             // массив&lt;br /&gt;
print(&amp;quot;hello&amp;quot; in sArr)               // вернет true, т.к. значение &amp;quot;hello&amp;quot; присутствует в массиве sArr &lt;br /&gt;
sDic = { price: 100, food: &amp;quot;Wine&amp;quot;}   // словарь&lt;br /&gt;
print(&amp;quot;food&amp;quot; in sDic)                // вернет true, т.к. ключ &amp;quot;food&amp;quot; присутствует в словаре sDic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
'''''button(caption){ SCRIPT }'''''&amp;lt;br&amp;gt;&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку с текстом '''caption''' в текущее сообщение. После нажатия на кнопку выполняется логика '''SCRIPT'''.&lt;br /&gt;
Если '''caption''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если '''obj''' - это сторока, то она выводится не зависимо от текущего языка. Если '''obj''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку. Если '''url''' - это строка, то он используется не зависимо от текущего языка. Если '''url''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.. Необязательный параметр '''width''' указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &lt;br /&gt;
image({ en: URL + &amp;quot;en.png&amp;quot;, ru: URL + &amp;quot;ru.png&amp;quot;}) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=75</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=75"/>
		<updated>2022-04-08T17:04:51Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: /* Работа с массивами */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&lt;br /&gt;
sRegExp = /[abc]/                    // регулярное выражение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также разрешается и питоновский стиль комментария:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 2253 # пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
'''''push(val1,val2...)''''' - добавить в конец массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.push(4) // добавить значение '4' в конец массива&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''unshift(val1,val2...)''''' - добавить в начало массива элементы со значениями '''val1, val2...'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.unshift(0) // добавить значение '0' в начало&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''pop()''''' - удалить последний элемент массива и вернуть его значение&lt;br /&gt;
'''''shift()''''' - удалить первый элемент массива и вернуть его значение&lt;br /&gt;
'''''slice(start,end)''''' - возвращает часть массива начиная с позиции '''start''' и если указана переменная '''end''', то до нее не включая&lt;br /&gt;
'''''splice()''''' - удаляет часть массива начиная с позиции '''start''' и если указана переменная '''end''', то до нее не включая&lt;br /&gt;
&lt;br /&gt;
Функции работы с массивом словарей:&lt;br /&gt;
&lt;br /&gt;
'''''find(EXPR)''''' - ищет элементы массива, удовлетворяющие условию '''EXPR'''. Найденные элементы возвращаются в виде массива&lt;br /&gt;
Например:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''total(EXPR)''''' - применить выражение '''EXPR''' к каждому элементу массива и суммировать все значения&lt;br /&gt;
Например посчитаем сумму товаров в корзине:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                                 // массив из трех объектов с продуктами&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120, amount: 3},&lt;br /&gt;
  {title: &amp;quot;Pizza&amp;quot;, price: 100, amount: 2},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40, amount: 3},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.total(price * amount)   // для каждого элемента массива умножаем цену на количество и складываем результат&lt;br /&gt;
print(&amp;quot;К оплате: $res грн.&amp;quot;)            // выведет сумму товаров &amp;quot;К оплате: 680 грн.&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {2+3}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экранирование спецсимволов '$','{','}' происходит путем добавления наклонной черты '\'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;price: 4.99\$ \{sale\}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)                       // выведет: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // получить длинну строки&lt;br /&gt;
sub = str.substring(3,5)   // получить подстроку начиная с 3-й позиции и до 5-й не включая&lt;br /&gt;
pos = str.search('lo')     // получить позицию подстроки, иначе -1&lt;br /&gt;
pos = str.search(/lo/)     // получить позицию подстроки используя регулярное выражение, иначе -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
Иногда удобно в цикле иметь и индекс массива, для этого перед переменной значения добавляем имя переменной индекса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(i, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$i: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
0: 3&lt;br /&gt;
1: 2&lt;br /&gt;
2: 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перебора ключей и значений словаря используется аналогичная конструкция:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = {pizza: 100, milk: 20, wine: 120}&lt;br /&gt;
for(key, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$key: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
pizza: 100&lt;br /&gt;
milk: 20&lt;br /&gt;
wine: 120&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-in&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''in''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор '''in''' проверяет есть ли значение в массиве либо является ключём в словаре.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;]             // массив&lt;br /&gt;
print(&amp;quot;hello&amp;quot; in sArr)               // вернет true, т.к. значение &amp;quot;hello&amp;quot; присутствует в массиве sArr &lt;br /&gt;
sDic = { price: 100, food: &amp;quot;Wine&amp;quot;}   // словарь&lt;br /&gt;
print(&amp;quot;food&amp;quot; in sDic)                // вернет true, т.к. ключ &amp;quot;food&amp;quot; присутствует в словаре sDic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
'''''button(caption){ SCRIPT }'''''&amp;lt;br&amp;gt;&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку с текстом '''caption''' в текущее сообщение. После нажатия на кнопку выполняется логика '''SCRIPT'''.&lt;br /&gt;
Если '''caption''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если '''obj''' - это сторока, то она выводится не зависимо от текущего языка. Если '''obj''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку. Если '''url''' - это строка, то он используется не зависимо от текущего языка. Если '''url''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.. Необязательный параметр '''width''' указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &lt;br /&gt;
image({ en: URL + &amp;quot;en.png&amp;quot;, ru: URL + &amp;quot;ru.png&amp;quot;}) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=74</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=74"/>
		<updated>2022-04-08T16:45:03Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: /* Работа с массивами */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&lt;br /&gt;
sRegExp = /[abc]/                    // регулярное выражение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также разрешается и питоновский стиль комментария:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 2253 # пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
'''''push(val1,val2...)''''' - добавить в конец массива элемент со значением '''val'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.push(4) // добавить в конец массива элемент со значением '4'&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;len = arr.length      // получить длинну массива&lt;br /&gt;
arr.push(4)           // добавить в конец массива элемент со значением '4'&lt;br /&gt;
arr.unshift(0)        // добавить в начало массива элемент со значением '0'&lt;br /&gt;
arr.pop()             // удалить последний элемент массива&lt;br /&gt;
arr.shift()           // удалить первый элемент массива&lt;br /&gt;
arr.slice(start,end)  // возращает часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
arr.splice(start,end) // удаляет часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поиск в массиве из словарей:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {2+3}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экранирование спецсимволов '$','{','}' происходит путем добавления наклонной черты '\'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;price: 4.99\$ \{sale\}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)                       // выведет: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // получить длинну строки&lt;br /&gt;
sub = str.substring(3,5)   // получить подстроку начиная с 3-й позиции и до 5-й не включая&lt;br /&gt;
pos = str.search('lo')     // получить позицию подстроки, иначе -1&lt;br /&gt;
pos = str.search(/lo/)     // получить позицию подстроки используя регулярное выражение, иначе -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
Иногда удобно в цикле иметь и индекс массива, для этого перед переменной значения добавляем имя переменной индекса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(i, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$i: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
0: 3&lt;br /&gt;
1: 2&lt;br /&gt;
2: 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перебора ключей и значений словаря используется аналогичная конструкция:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = {pizza: 100, milk: 20, wine: 120}&lt;br /&gt;
for(key, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$key: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
pizza: 100&lt;br /&gt;
milk: 20&lt;br /&gt;
wine: 120&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-in&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''in''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор '''in''' проверяет есть ли значение в массиве либо является ключём в словаре.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;]             // массив&lt;br /&gt;
print(&amp;quot;hello&amp;quot; in sArr)               // вернет true, т.к. значение &amp;quot;hello&amp;quot; присутствует в массиве sArr &lt;br /&gt;
sDic = { price: 100, food: &amp;quot;Wine&amp;quot;}   // словарь&lt;br /&gt;
print(&amp;quot;food&amp;quot; in sDic)                // вернет true, т.к. ключ &amp;quot;food&amp;quot; присутствует в словаре sDic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
'''''button(caption){ SCRIPT }'''''&amp;lt;br&amp;gt;&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку с текстом '''caption''' в текущее сообщение. После нажатия на кнопку выполняется логика '''SCRIPT'''.&lt;br /&gt;
Если '''caption''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если '''obj''' - это сторока, то она выводится не зависимо от текущего языка. Если '''obj''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку. Если '''url''' - это строка, то он используется не зависимо от текущего языка. Если '''url''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.. Необязательный параметр '''width''' указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &lt;br /&gt;
image({ en: URL + &amp;quot;en.png&amp;quot;, ru: URL + &amp;quot;ru.png&amp;quot;}) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=73</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=73"/>
		<updated>2022-04-08T16:43:58Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&lt;br /&gt;
sRegExp = /[abc]/                    // регулярное выражение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также разрешается и питоновский стиль комментария:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 2253 # пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
'''''push(val1,val2...)''''' - добавить в конец массива элемент со значением '''val'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr.push(4) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;len = arr.length      // получить длинну массива&lt;br /&gt;
arr.push(4)           // добавить в конец массива элемент со значением '4'&lt;br /&gt;
arr.unshift(0)        // добавить в начало массива элемент со значением '0'&lt;br /&gt;
arr.pop()             // удалить последний элемент массива&lt;br /&gt;
arr.shift()           // удалить первый элемент массива&lt;br /&gt;
arr.slice(start,end)  // возращает часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
arr.splice(start,end) // удаляет часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поиск в массиве из словарей:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {2+3}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экранирование спецсимволов '$','{','}' происходит путем добавления наклонной черты '\'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;price: 4.99\$ \{sale\}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)                       // выведет: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // получить длинну строки&lt;br /&gt;
sub = str.substring(3,5)   // получить подстроку начиная с 3-й позиции и до 5-й не включая&lt;br /&gt;
pos = str.search('lo')     // получить позицию подстроки, иначе -1&lt;br /&gt;
pos = str.search(/lo/)     // получить позицию подстроки используя регулярное выражение, иначе -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
Иногда удобно в цикле иметь и индекс массива, для этого перед переменной значения добавляем имя переменной индекса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(i, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$i: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
0: 3&lt;br /&gt;
1: 2&lt;br /&gt;
2: 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перебора ключей и значений словаря используется аналогичная конструкция:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = {pizza: 100, milk: 20, wine: 120}&lt;br /&gt;
for(key, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$key: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
pizza: 100&lt;br /&gt;
milk: 20&lt;br /&gt;
wine: 120&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-in&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''in''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор '''in''' проверяет есть ли значение в массиве либо является ключём в словаре.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;]             // массив&lt;br /&gt;
print(&amp;quot;hello&amp;quot; in sArr)               // вернет true, т.к. значение &amp;quot;hello&amp;quot; присутствует в массиве sArr &lt;br /&gt;
sDic = { price: 100, food: &amp;quot;Wine&amp;quot;}   // словарь&lt;br /&gt;
print(&amp;quot;food&amp;quot; in sDic)                // вернет true, т.к. ключ &amp;quot;food&amp;quot; присутствует в словаре sDic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
'''''button(caption){ SCRIPT }'''''&amp;lt;br&amp;gt;&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку с текстом '''caption''' в текущее сообщение. После нажатия на кнопку выполняется логика '''SCRIPT'''.&lt;br /&gt;
Если '''caption''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если '''obj''' - это сторока, то она выводится не зависимо от текущего языка. Если '''obj''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку. Если '''url''' - это строка, то он используется не зависимо от текущего языка. Если '''url''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.. Необязательный параметр '''width''' указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &lt;br /&gt;
image({ en: URL + &amp;quot;en.png&amp;quot;, ru: URL + &amp;quot;ru.png&amp;quot;}) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=72</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=72"/>
		<updated>2022-04-08T16:37:06Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: /* Комментарии */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&lt;br /&gt;
sRegExp = /[abc]/                    // регулярное выражение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также разрешается и питоновский стиль комментария:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 2253 # пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;len = arr.length      // получить длинну массива&lt;br /&gt;
arr.push(4)           // добавить в конец массива элемент со значением '4'&lt;br /&gt;
arr.unshift(0)        // добавить в начало массива элемент со значением '0'&lt;br /&gt;
arr.pop()             // удалить последний элемент массива&lt;br /&gt;
arr.shift()           // удалить первый элемент массива&lt;br /&gt;
arr.slice(start,end)  // возращает часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
arr.splice(start,end) // удаляет часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поиск в массиве из словарей:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {2+3}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экранирование спецсимволов '$','{','}' происходит путем добавления наклонной черты '\'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;price: 4.99\$ \{sale\}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)                       // выведет: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // получить длинну строки&lt;br /&gt;
sub = str.substring(3,5)   // получить подстроку начиная с 3-й позиции и до 5-й не включая&lt;br /&gt;
pos = str.search('lo')     // получить позицию подстроки, иначе -1&lt;br /&gt;
pos = str.search(/lo/)     // получить позицию подстроки используя регулярное выражение, иначе -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
Иногда удобно в цикле иметь и индекс массива, для этого перед переменной значения добавляем имя переменной индекса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(i, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$i: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
0: 3&lt;br /&gt;
1: 2&lt;br /&gt;
2: 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перебора ключей и значений словаря используется аналогичная конструкция:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = {pizza: 100, milk: 20, wine: 120}&lt;br /&gt;
for(key, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$key: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
pizza: 100&lt;br /&gt;
milk: 20&lt;br /&gt;
wine: 120&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-in&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''in''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор '''in''' проверяет есть ли значение в массиве либо является ключём в словаре.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;]             // массив&lt;br /&gt;
print(&amp;quot;hello&amp;quot; in sArr)               // вернет true, т.к. значение &amp;quot;hello&amp;quot; присутствует в массиве sArr &lt;br /&gt;
sDic = { price: 100, food: &amp;quot;Wine&amp;quot;}   // словарь&lt;br /&gt;
print(&amp;quot;food&amp;quot; in sDic)                // вернет true, т.к. ключ &amp;quot;food&amp;quot; присутствует в словаре sDic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
'''''button(caption){ SCRIPT }'''''&amp;lt;br&amp;gt;&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку с текстом '''caption''' в текущее сообщение. После нажатия на кнопку выполняется логика '''SCRIPT'''.&lt;br /&gt;
Если '''caption''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если '''obj''' - это сторока, то она выводится не зависимо от текущего языка. Если '''obj''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку. Если '''url''' - это строка, то он используется не зависимо от текущего языка. Если '''url''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.. Необязательный параметр '''width''' указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &lt;br /&gt;
image({ en: URL + &amp;quot;en.png&amp;quot;, ru: URL + &amp;quot;ru.png&amp;quot;}) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=71</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=71"/>
		<updated>2022-04-08T16:36:31Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: /* Комментарии */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&lt;br /&gt;
sRegExp = /[abc]/                    // регулярное выражение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разрешается использовать питоновский стиль комментария:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 2253 # пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;len = arr.length      // получить длинну массива&lt;br /&gt;
arr.push(4)           // добавить в конец массива элемент со значением '4'&lt;br /&gt;
arr.unshift(0)        // добавить в начало массива элемент со значением '0'&lt;br /&gt;
arr.pop()             // удалить последний элемент массива&lt;br /&gt;
arr.shift()           // удалить первый элемент массива&lt;br /&gt;
arr.slice(start,end)  // возращает часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
arr.splice(start,end) // удаляет часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поиск в массиве из словарей:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {2+3}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экранирование спецсимволов '$','{','}' происходит путем добавления наклонной черты '\'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;price: 4.99\$ \{sale\}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)                       // выведет: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // получить длинну строки&lt;br /&gt;
sub = str.substring(3,5)   // получить подстроку начиная с 3-й позиции и до 5-й не включая&lt;br /&gt;
pos = str.search('lo')     // получить позицию подстроки, иначе -1&lt;br /&gt;
pos = str.search(/lo/)     // получить позицию подстроки используя регулярное выражение, иначе -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
Иногда удобно в цикле иметь и индекс массива, для этого перед переменной значения добавляем имя переменной индекса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(i, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$i: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
0: 3&lt;br /&gt;
1: 2&lt;br /&gt;
2: 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перебора ключей и значений словаря используется аналогичная конструкция:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = {pizza: 100, milk: 20, wine: 120}&lt;br /&gt;
for(key, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$key: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
pizza: 100&lt;br /&gt;
milk: 20&lt;br /&gt;
wine: 120&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-in&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''in''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор '''in''' проверяет есть ли значение в массиве либо является ключём в словаре.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;]             // массив&lt;br /&gt;
print(&amp;quot;hello&amp;quot; in sArr)               // вернет true, т.к. значение &amp;quot;hello&amp;quot; присутствует в массиве sArr &lt;br /&gt;
sDic = { price: 100, food: &amp;quot;Wine&amp;quot;}   // словарь&lt;br /&gt;
print(&amp;quot;food&amp;quot; in sDic)                // вернет true, т.к. ключ &amp;quot;food&amp;quot; присутствует в словаре sDic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
'''''button(caption){ SCRIPT }'''''&amp;lt;br&amp;gt;&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку с текстом '''caption''' в текущее сообщение. После нажатия на кнопку выполняется логика '''SCRIPT'''.&lt;br /&gt;
Если '''caption''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если '''obj''' - это сторока, то она выводится не зависимо от текущего языка. Если '''obj''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку. Если '''url''' - это строка, то он используется не зависимо от текущего языка. Если '''url''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.. Необязательный параметр '''width''' указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &lt;br /&gt;
image({ en: URL + &amp;quot;en.png&amp;quot;, ru: URL + &amp;quot;ru.png&amp;quot;}) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=70</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=70"/>
		<updated>2022-04-08T16:36:15Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: /* Комментарии */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&lt;br /&gt;
sRegExp = /[abc]/                    // регулярное выражение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разрешается использовать питоновский стиль комментария&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 2253 # пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;len = arr.length      // получить длинну массива&lt;br /&gt;
arr.push(4)           // добавить в конец массива элемент со значением '4'&lt;br /&gt;
arr.unshift(0)        // добавить в начало массива элемент со значением '0'&lt;br /&gt;
arr.pop()             // удалить последний элемент массива&lt;br /&gt;
arr.shift()           // удалить первый элемент массива&lt;br /&gt;
arr.slice(start,end)  // возращает часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
arr.splice(start,end) // удаляет часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поиск в массиве из словарей:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {2+3}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экранирование спецсимволов '$','{','}' происходит путем добавления наклонной черты '\'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;price: 4.99\$ \{sale\}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)                       // выведет: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // получить длинну строки&lt;br /&gt;
sub = str.substring(3,5)   // получить подстроку начиная с 3-й позиции и до 5-й не включая&lt;br /&gt;
pos = str.search('lo')     // получить позицию подстроки, иначе -1&lt;br /&gt;
pos = str.search(/lo/)     // получить позицию подстроки используя регулярное выражение, иначе -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
Иногда удобно в цикле иметь и индекс массива, для этого перед переменной значения добавляем имя переменной индекса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(i, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$i: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
0: 3&lt;br /&gt;
1: 2&lt;br /&gt;
2: 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перебора ключей и значений словаря используется аналогичная конструкция:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = {pizza: 100, milk: 20, wine: 120}&lt;br /&gt;
for(key, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$key: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
pizza: 100&lt;br /&gt;
milk: 20&lt;br /&gt;
wine: 120&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-in&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''in''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор '''in''' проверяет есть ли значение в массиве либо является ключём в словаре.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;]             // массив&lt;br /&gt;
print(&amp;quot;hello&amp;quot; in sArr)               // вернет true, т.к. значение &amp;quot;hello&amp;quot; присутствует в массиве sArr &lt;br /&gt;
sDic = { price: 100, food: &amp;quot;Wine&amp;quot;}   // словарь&lt;br /&gt;
print(&amp;quot;food&amp;quot; in sDic)                // вернет true, т.к. ключ &amp;quot;food&amp;quot; присутствует в словаре sDic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
'''''button(caption){ SCRIPT }'''''&amp;lt;br&amp;gt;&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку с текстом '''caption''' в текущее сообщение. После нажатия на кнопку выполняется логика '''SCRIPT'''.&lt;br /&gt;
Если '''caption''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если '''obj''' - это сторока, то она выводится не зависимо от текущего языка. Если '''obj''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку. Если '''url''' - это строка, то он используется не зависимо от текущего языка. Если '''url''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.. Необязательный параметр '''width''' указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &lt;br /&gt;
image({ en: URL + &amp;quot;en.png&amp;quot;, ru: URL + &amp;quot;ru.png&amp;quot;}) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=69</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=69"/>
		<updated>2022-04-08T16:34:27Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: /* Комментарии */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&lt;br /&gt;
sRegExp = /[abc]/                    // регулярное выражение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария в стиле JS&lt;br /&gt;
b = 21   #  пример однострочного комментария в стиле PY&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;len = arr.length      // получить длинну массива&lt;br /&gt;
arr.push(4)           // добавить в конец массива элемент со значением '4'&lt;br /&gt;
arr.unshift(0)        // добавить в начало массива элемент со значением '0'&lt;br /&gt;
arr.pop()             // удалить последний элемент массива&lt;br /&gt;
arr.shift()           // удалить первый элемент массива&lt;br /&gt;
arr.slice(start,end)  // возращает часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
arr.splice(start,end) // удаляет часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поиск в массиве из словарей:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {2+3}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экранирование спецсимволов '$','{','}' происходит путем добавления наклонной черты '\'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;price: 4.99\$ \{sale\}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)                       // выведет: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // получить длинну строки&lt;br /&gt;
sub = str.substring(3,5)   // получить подстроку начиная с 3-й позиции и до 5-й не включая&lt;br /&gt;
pos = str.search('lo')     // получить позицию подстроки, иначе -1&lt;br /&gt;
pos = str.search(/lo/)     // получить позицию подстроки используя регулярное выражение, иначе -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
Иногда удобно в цикле иметь и индекс массива, для этого перед переменной значения добавляем имя переменной индекса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(i, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$i: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
0: 3&lt;br /&gt;
1: 2&lt;br /&gt;
2: 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перебора ключей и значений словаря используется аналогичная конструкция:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = {pizza: 100, milk: 20, wine: 120}&lt;br /&gt;
for(key, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$key: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
pizza: 100&lt;br /&gt;
milk: 20&lt;br /&gt;
wine: 120&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-in&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''in''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор '''in''' проверяет есть ли значение в массиве либо является ключём в словаре.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;]             // массив&lt;br /&gt;
print(&amp;quot;hello&amp;quot; in sArr)               // вернет true, т.к. значение &amp;quot;hello&amp;quot; присутствует в массиве sArr &lt;br /&gt;
sDic = { price: 100, food: &amp;quot;Wine&amp;quot;}   // словарь&lt;br /&gt;
print(&amp;quot;food&amp;quot; in sDic)                // вернет true, т.к. ключ &amp;quot;food&amp;quot; присутствует в словаре sDic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
'''''button(caption){ SCRIPT }'''''&amp;lt;br&amp;gt;&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку с текстом '''caption''' в текущее сообщение. После нажатия на кнопку выполняется логика '''SCRIPT'''.&lt;br /&gt;
Если '''caption''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если '''obj''' - это сторока, то она выводится не зависимо от текущего языка. Если '''obj''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку. Если '''url''' - это строка, то он используется не зависимо от текущего языка. Если '''url''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.. Необязательный параметр '''width''' указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &lt;br /&gt;
image({ en: URL + &amp;quot;en.png&amp;quot;, ru: URL + &amp;quot;ru.png&amp;quot;}) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=68</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=68"/>
		<updated>2022-04-07T15:49:36Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: /* Итератор for */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&lt;br /&gt;
sRegExp = /[abc]/                    // регулярное выражение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;len = arr.length      // получить длинну массива&lt;br /&gt;
arr.push(4)           // добавить в конец массива элемент со значением '4'&lt;br /&gt;
arr.unshift(0)        // добавить в начало массива элемент со значением '0'&lt;br /&gt;
arr.pop()             // удалить последний элемент массива&lt;br /&gt;
arr.shift()           // удалить первый элемент массива&lt;br /&gt;
arr.slice(start,end)  // возращает часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
arr.splice(start,end) // удаляет часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поиск в массиве из словарей:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {2+3}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экранирование спецсимволов '$','{','}' происходит путем добавления наклонной черты '\'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;price: 4.99\$ \{sale\}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)                       // выведет: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // получить длинну строки&lt;br /&gt;
sub = str.substring(3,5)   // получить подстроку начиная с 3-й позиции и до 5-й не включая&lt;br /&gt;
pos = str.search('lo')     // получить позицию подстроки, иначе -1&lt;br /&gt;
pos = str.search(/lo/)     // получить позицию подстроки используя регулярное выражение, иначе -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
Иногда удобно в цикле иметь и индекс массива, для этого перед переменной значения добавляем имя переменной индекса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(i, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$i: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
0: 3&lt;br /&gt;
1: 2&lt;br /&gt;
2: 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перебора ключей и значений словаря используется аналогичная конструкция:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = {pizza: 100, milk: 20, wine: 120}&lt;br /&gt;
for(key, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$key: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
pizza: 100&lt;br /&gt;
milk: 20&lt;br /&gt;
wine: 120&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-in&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''in''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор '''in''' проверяет есть ли значение в массиве либо является ключём в словаре.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;]             // массив&lt;br /&gt;
print(&amp;quot;hello&amp;quot; in sArr)               // вернет true, т.к. значение &amp;quot;hello&amp;quot; присутствует в массиве sArr &lt;br /&gt;
sDic = { price: 100, food: &amp;quot;Wine&amp;quot;}   // словарь&lt;br /&gt;
print(&amp;quot;food&amp;quot; in sDic)                // вернет true, т.к. ключ &amp;quot;food&amp;quot; присутствует в словаре sDic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
'''''button(caption){ SCRIPT }'''''&amp;lt;br&amp;gt;&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку с текстом '''caption''' в текущее сообщение. После нажатия на кнопку выполняется логика '''SCRIPT'''.&lt;br /&gt;
Если '''caption''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если '''obj''' - это сторока, то она выводится не зависимо от текущего языка. Если '''obj''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку. Если '''url''' - это строка, то он используется не зависимо от текущего языка. Если '''url''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.. Необязательный параметр '''width''' указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &lt;br /&gt;
image({ en: URL + &amp;quot;en.png&amp;quot;, ru: URL + &amp;quot;ru.png&amp;quot;}) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=67</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=67"/>
		<updated>2022-04-07T15:46:11Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: /* Итератор for */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&lt;br /&gt;
sRegExp = /[abc]/                    // регулярное выражение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;len = arr.length      // получить длинну массива&lt;br /&gt;
arr.push(4)           // добавить в конец массива элемент со значением '4'&lt;br /&gt;
arr.unshift(0)        // добавить в начало массива элемент со значением '0'&lt;br /&gt;
arr.pop()             // удалить последний элемент массива&lt;br /&gt;
arr.shift()           // удалить первый элемент массива&lt;br /&gt;
arr.slice(start,end)  // возращает часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
arr.splice(start,end) // удаляет часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поиск в массиве из словарей:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {2+3}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экранирование спецсимволов '$','{','}' происходит путем добавления наклонной черты '\'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;price: 4.99\$ \{sale\}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)                       // выведет: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // получить длинну строки&lt;br /&gt;
sub = str.substring(3,5)   // получить подстроку начиная с 3-й позиции и до 5-й не включая&lt;br /&gt;
pos = str.search('lo')     // получить позицию подстроки, иначе -1&lt;br /&gt;
pos = str.search(/lo/)     // получить позицию подстроки используя регулярное выражение, иначе -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
Иногда удобно в цикле иметь и индекс массива, для этого перед переменной значения добавляем имя переменной индекса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [3,2,1]&lt;br /&gt;
for(i, val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;$i: $val&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
0: 3&lt;br /&gt;
1: 2&lt;br /&gt;
2: 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-in&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''in''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор '''in''' проверяет есть ли значение в массиве либо является ключём в словаре.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;]             // массив&lt;br /&gt;
print(&amp;quot;hello&amp;quot; in sArr)               // вернет true, т.к. значение &amp;quot;hello&amp;quot; присутствует в массиве sArr &lt;br /&gt;
sDic = { price: 100, food: &amp;quot;Wine&amp;quot;}   // словарь&lt;br /&gt;
print(&amp;quot;food&amp;quot; in sDic)                // вернет true, т.к. ключ &amp;quot;food&amp;quot; присутствует в словаре sDic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
'''''button(caption){ SCRIPT }'''''&amp;lt;br&amp;gt;&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку с текстом '''caption''' в текущее сообщение. После нажатия на кнопку выполняется логика '''SCRIPT'''.&lt;br /&gt;
Если '''caption''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если '''obj''' - это сторока, то она выводится не зависимо от текущего языка. Если '''obj''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку. Если '''url''' - это строка, то он используется не зависимо от текущего языка. Если '''url''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.. Необязательный параметр '''width''' указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &lt;br /&gt;
image({ en: URL + &amp;quot;en.png&amp;quot;, ru: URL + &amp;quot;ru.png&amp;quot;}) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=66</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=66"/>
		<updated>2022-04-07T14:38:02Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: /* Оператор button */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&lt;br /&gt;
sRegExp = /[abc]/                    // регулярное выражение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;len = arr.length      // получить длинну массива&lt;br /&gt;
arr.push(4)           // добавить в конец массива элемент со значением '4'&lt;br /&gt;
arr.unshift(0)        // добавить в начало массива элемент со значением '0'&lt;br /&gt;
arr.pop()             // удалить последний элемент массива&lt;br /&gt;
arr.shift()           // удалить первый элемент массива&lt;br /&gt;
arr.slice(start,end)  // возращает часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
arr.splice(start,end) // удаляет часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поиск в массиве из словарей:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {2+3}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экранирование спецсимволов '$','{','}' происходит путем добавления наклонной черты '\'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;price: 4.99\$ \{sale\}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)                       // выведет: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // получить длинну строки&lt;br /&gt;
sub = str.substring(3,5)   // получить подстроку начиная с 3-й позиции и до 5-й не включая&lt;br /&gt;
pos = str.search('lo')     // получить позицию подстроки, иначе -1&lt;br /&gt;
pos = str.search(/lo/)     // получить позицию подстроки используя регулярное выражение, иначе -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-in&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''in''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор '''in''' проверяет есть ли значение в массиве либо является ключём в словаре.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;]             // массив&lt;br /&gt;
print(&amp;quot;hello&amp;quot; in sArr)               // вернет true, т.к. значение &amp;quot;hello&amp;quot; присутствует в массиве sArr &lt;br /&gt;
sDic = { price: 100, food: &amp;quot;Wine&amp;quot;}   // словарь&lt;br /&gt;
print(&amp;quot;food&amp;quot; in sDic)                // вернет true, т.к. ключ &amp;quot;food&amp;quot; присутствует в словаре sDic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
'''''button(caption){ SCRIPT }'''''&amp;lt;br&amp;gt;&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку с текстом '''caption''' в текущее сообщение. После нажатия на кнопку выполняется логика '''SCRIPT'''.&lt;br /&gt;
Если '''caption''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если '''obj''' - это сторока, то она выводится не зависимо от текущего языка. Если '''obj''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку. Если '''url''' - это строка, то он используется не зависимо от текущего языка. Если '''url''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.. Необязательный параметр '''width''' указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &lt;br /&gt;
image({ en: URL + &amp;quot;en.png&amp;quot;, ru: URL + &amp;quot;ru.png&amp;quot;}) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=65</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=65"/>
		<updated>2022-04-07T14:36:58Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: /* Оператор button */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&lt;br /&gt;
sRegExp = /[abc]/                    // регулярное выражение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;len = arr.length      // получить длинну массива&lt;br /&gt;
arr.push(4)           // добавить в конец массива элемент со значением '4'&lt;br /&gt;
arr.unshift(0)        // добавить в начало массива элемент со значением '0'&lt;br /&gt;
arr.pop()             // удалить последний элемент массива&lt;br /&gt;
arr.shift()           // удалить первый элемент массива&lt;br /&gt;
arr.slice(start,end)  // возращает часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
arr.splice(start,end) // удаляет часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поиск в массиве из словарей:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {2+3}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экранирование спецсимволов '$','{','}' происходит путем добавления наклонной черты '\'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;price: 4.99\$ \{sale\}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)                       // выведет: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // получить длинну строки&lt;br /&gt;
sub = str.substring(3,5)   // получить подстроку начиная с 3-й позиции и до 5-й не включая&lt;br /&gt;
pos = str.search('lo')     // получить позицию подстроки, иначе -1&lt;br /&gt;
pos = str.search(/lo/)     // получить позицию подстроки используя регулярное выражение, иначе -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-in&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''in''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор '''in''' проверяет есть ли значение в массиве либо является ключём в словаре.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;]             // массив&lt;br /&gt;
print(&amp;quot;hello&amp;quot; in sArr)               // вернет true, т.к. значение &amp;quot;hello&amp;quot; присутствует в массиве sArr &lt;br /&gt;
sDic = { price: 100, food: &amp;quot;Wine&amp;quot;}   // словарь&lt;br /&gt;
print(&amp;quot;food&amp;quot; in sDic)                // вернет true, т.к. ключ &amp;quot;food&amp;quot; присутствует в словаре sDic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
'''''button(caption){ SCRIPT }'''''&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку с текстом '''caption''' в текущее сообщение. После нажатия на кнопку выполняется логика '''SCRIPT'''.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если '''obj''' - это сторока, то она выводится не зависимо от текущего языка. Если '''obj''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку. Если '''url''' - это строка, то он используется не зависимо от текущего языка. Если '''url''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.. Необязательный параметр '''width''' указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &lt;br /&gt;
image({ en: URL + &amp;quot;en.png&amp;quot;, ru: URL + &amp;quot;ru.png&amp;quot;}) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=64</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=64"/>
		<updated>2022-04-07T14:13:21Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: /* Функции работы с контентом */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&lt;br /&gt;
sRegExp = /[abc]/                    // регулярное выражение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;len = arr.length      // получить длинну массива&lt;br /&gt;
arr.push(4)           // добавить в конец массива элемент со значением '4'&lt;br /&gt;
arr.unshift(0)        // добавить в начало массива элемент со значением '0'&lt;br /&gt;
arr.pop()             // удалить последний элемент массива&lt;br /&gt;
arr.shift()           // удалить первый элемент массива&lt;br /&gt;
arr.slice(start,end)  // возращает часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
arr.splice(start,end) // удаляет часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поиск в массиве из словарей:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {2+3}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экранирование спецсимволов '$','{','}' происходит путем добавления наклонной черты '\'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;price: 4.99\$ \{sale\}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)                       // выведет: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // получить длинну строки&lt;br /&gt;
sub = str.substring(3,5)   // получить подстроку начиная с 3-й позиции и до 5-й не включая&lt;br /&gt;
pos = str.search('lo')     // получить позицию подстроки, иначе -1&lt;br /&gt;
pos = str.search(/lo/)     // получить позицию подстроки используя регулярное выражение, иначе -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-in&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''in''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор '''in''' проверяет есть ли значение в массиве либо является ключём в словаре.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;]             // массив&lt;br /&gt;
print(&amp;quot;hello&amp;quot; in sArr)               // вернет true, т.к. значение &amp;quot;hello&amp;quot; присутствует в массиве sArr &lt;br /&gt;
sDic = { price: 100, food: &amp;quot;Wine&amp;quot;}   // словарь&lt;br /&gt;
print(&amp;quot;food&amp;quot; in sDic)                // вернет true, т.к. ключ &amp;quot;food&amp;quot; присутствует в словаре sDic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку&lt;br /&gt;
с необходимым текстом и логику, которая должна быть&lt;br /&gt;
выполнена при нажатии&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если '''obj''' - это сторока, то она выводится не зависимо от текущего языка. Если '''obj''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку. Если '''url''' - это строка, то он используется не зависимо от текущего языка. Если '''url''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.. Необязательный параметр '''width''' указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &lt;br /&gt;
image({ en: URL + &amp;quot;en.png&amp;quot;, ru: URL + &amp;quot;ru.png&amp;quot;}) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=63</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=63"/>
		<updated>2022-04-07T14:12:48Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: /* Функции работы с контентом */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&lt;br /&gt;
sRegExp = /[abc]/                    // регулярное выражение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;len = arr.length      // получить длинну массива&lt;br /&gt;
arr.push(4)           // добавить в конец массива элемент со значением '4'&lt;br /&gt;
arr.unshift(0)        // добавить в начало массива элемент со значением '0'&lt;br /&gt;
arr.pop()             // удалить последний элемент массива&lt;br /&gt;
arr.shift()           // удалить первый элемент массива&lt;br /&gt;
arr.slice(start,end)  // возращает часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
arr.splice(start,end) // удаляет часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поиск в массиве из словарей:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {2+3}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экранирование спецсимволов '$','{','}' происходит путем добавления наклонной черты '\'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;price: 4.99\$ \{sale\}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)                       // выведет: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // получить длинну строки&lt;br /&gt;
sub = str.substring(3,5)   // получить подстроку начиная с 3-й позиции и до 5-й не включая&lt;br /&gt;
pos = str.search('lo')     // получить позицию подстроки, иначе -1&lt;br /&gt;
pos = str.search(/lo/)     // получить позицию подстроки используя регулярное выражение, иначе -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-in&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''in''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор '''in''' проверяет есть ли значение в массиве либо является ключём в словаре.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;]             // массив&lt;br /&gt;
print(&amp;quot;hello&amp;quot; in sArr)               // вернет true, т.к. значение &amp;quot;hello&amp;quot; присутствует в массиве sArr &lt;br /&gt;
sDic = { price: 100, food: &amp;quot;Wine&amp;quot;}   // словарь&lt;br /&gt;
print(&amp;quot;food&amp;quot; in sDic)                // вернет true, т.к. ключ &amp;quot;food&amp;quot; присутствует в словаре sDic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку&lt;br /&gt;
с необходимым текстом и логику, которая должна быть&lt;br /&gt;
выполнена при нажатии&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если '''obj''' - это сторока, то она выводится не зависимо от текущего языка. Если '''obj''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку. Если '''url''' - это строка, то он используется не зависимо от текущего языка. Если '''url''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.. Необязательный параметр '''width''' указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &lt;br /&gt;
text({ en: URL + &amp;quot;en.png&amp;quot;, ru: URL + &amp;quot;ru.png&amp;quot;}) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=62</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=62"/>
		<updated>2022-04-07T14:12:19Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: /* Функции работы с контентом */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&lt;br /&gt;
sRegExp = /[abc]/                    // регулярное выражение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;len = arr.length      // получить длинну массива&lt;br /&gt;
arr.push(4)           // добавить в конец массива элемент со значением '4'&lt;br /&gt;
arr.unshift(0)        // добавить в начало массива элемент со значением '0'&lt;br /&gt;
arr.pop()             // удалить последний элемент массива&lt;br /&gt;
arr.shift()           // удалить первый элемент массива&lt;br /&gt;
arr.slice(start,end)  // возращает часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
arr.splice(start,end) // удаляет часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поиск в массиве из словарей:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {2+3}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экранирование спецсимволов '$','{','}' происходит путем добавления наклонной черты '\'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;price: 4.99\$ \{sale\}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)                       // выведет: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // получить длинну строки&lt;br /&gt;
sub = str.substring(3,5)   // получить подстроку начиная с 3-й позиции и до 5-й не включая&lt;br /&gt;
pos = str.search('lo')     // получить позицию подстроки, иначе -1&lt;br /&gt;
pos = str.search(/lo/)     // получить позицию подстроки используя регулярное выражение, иначе -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-in&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''in''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор '''in''' проверяет есть ли значение в массиве либо является ключём в словаре.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;]             // массив&lt;br /&gt;
print(&amp;quot;hello&amp;quot; in sArr)               // вернет true, т.к. значение &amp;quot;hello&amp;quot; присутствует в массиве sArr &lt;br /&gt;
sDic = { price: 100, food: &amp;quot;Wine&amp;quot;}   // словарь&lt;br /&gt;
print(&amp;quot;food&amp;quot; in sDic)                // вернет true, т.к. ключ &amp;quot;food&amp;quot; присутствует в словаре sDic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку&lt;br /&gt;
с необходимым текстом и логику, которая должна быть&lt;br /&gt;
выполнена при нажатии&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если '''obj''' - это сторока, то она выводится не зависимо от текущего языка. Если '''obj''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку. Если '''url''' - это строка, то он используется не зависимо от текущего языка. Если '''url''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.. Необязательный параметр '''width''' указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &lt;br /&gt;
text({ en: &amp;quot;URL + &amp;quot;en.png&amp;quot;, ru: &amp;quot;URL + &amp;quot;ru.png&amp;quot;}) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=61</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=61"/>
		<updated>2022-04-07T14:10:16Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: /* Функции работы с контентом */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&lt;br /&gt;
sRegExp = /[abc]/                    // регулярное выражение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;len = arr.length      // получить длинну массива&lt;br /&gt;
arr.push(4)           // добавить в конец массива элемент со значением '4'&lt;br /&gt;
arr.unshift(0)        // добавить в начало массива элемент со значением '0'&lt;br /&gt;
arr.pop()             // удалить последний элемент массива&lt;br /&gt;
arr.shift()           // удалить первый элемент массива&lt;br /&gt;
arr.slice(start,end)  // возращает часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
arr.splice(start,end) // удаляет часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поиск в массиве из словарей:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {2+3}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экранирование спецсимволов '$','{','}' происходит путем добавления наклонной черты '\'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;price: 4.99\$ \{sale\}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)                       // выведет: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // получить длинну строки&lt;br /&gt;
sub = str.substring(3,5)   // получить подстроку начиная с 3-й позиции и до 5-й не включая&lt;br /&gt;
pos = str.search('lo')     // получить позицию подстроки, иначе -1&lt;br /&gt;
pos = str.search(/lo/)     // получить позицию подстроки используя регулярное выражение, иначе -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-in&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''in''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор '''in''' проверяет есть ли значение в массиве либо является ключём в словаре.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;]             // массив&lt;br /&gt;
print(&amp;quot;hello&amp;quot; in sArr)               // вернет true, т.к. значение &amp;quot;hello&amp;quot; присутствует в массиве sArr &lt;br /&gt;
sDic = { price: 100, food: &amp;quot;Wine&amp;quot;}   // словарь&lt;br /&gt;
print(&amp;quot;food&amp;quot; in sDic)                // вернет true, т.к. ключ &amp;quot;food&amp;quot; присутствует в словаре sDic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку&lt;br /&gt;
с необходимым текстом и логику, которая должна быть&lt;br /&gt;
выполнена при нажатии&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если '''obj''' - это сторока, то она выводится не зависимо от текущего языка. Если '''obj''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку. Если '''url''' - это строка, то он используется не зависимо от текущего языка. Если '''url''' - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.. Необязательный параметр '''width''' указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=60</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=60"/>
		<updated>2022-04-07T14:09:36Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: /* Функции работы с контентом */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&lt;br /&gt;
sRegExp = /[abc]/                    // регулярное выражение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;len = arr.length      // получить длинну массива&lt;br /&gt;
arr.push(4)           // добавить в конец массива элемент со значением '4'&lt;br /&gt;
arr.unshift(0)        // добавить в начало массива элемент со значением '0'&lt;br /&gt;
arr.pop()             // удалить последний элемент массива&lt;br /&gt;
arr.shift()           // удалить первый элемент массива&lt;br /&gt;
arr.slice(start,end)  // возращает часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
arr.splice(start,end) // удаляет часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поиск в массиве из словарей:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {2+3}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экранирование спецсимволов '$','{','}' происходит путем добавления наклонной черты '\'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;price: 4.99\$ \{sale\}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)                       // выведет: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // получить длинну строки&lt;br /&gt;
sub = str.substring(3,5)   // получить подстроку начиная с 3-й позиции и до 5-й не включая&lt;br /&gt;
pos = str.search('lo')     // получить позицию подстроки, иначе -1&lt;br /&gt;
pos = str.search(/lo/)     // получить позицию подстроки используя регулярное выражение, иначе -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-in&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''in''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор '''in''' проверяет есть ли значение в массиве либо является ключём в словаре.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;]             // массив&lt;br /&gt;
print(&amp;quot;hello&amp;quot; in sArr)               // вернет true, т.к. значение &amp;quot;hello&amp;quot; присутствует в массиве sArr &lt;br /&gt;
sDic = { price: 100, food: &amp;quot;Wine&amp;quot;}   // словарь&lt;br /&gt;
print(&amp;quot;food&amp;quot; in sDic)                // вернет true, т.к. ключ &amp;quot;food&amp;quot; присутствует в словаре sDic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку&lt;br /&gt;
с необходимым текстом и логику, которая должна быть&lt;br /&gt;
выполнена при нажатии&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если '''obj''' - это сторока, то она выводится не зависимо от текущего языка. Если obj - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку. Если '''url''' - это строка, то он используется не зависимо от текущего языка. Если url - объект, то он должен состоять из двухбуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.. Необязательный параметр '''width''' указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=59</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=59"/>
		<updated>2022-04-07T10:02:45Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: /* Типы переменных */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&lt;br /&gt;
sRegExp = /[abc]/                    // регулярное выражение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;len = arr.length      // получить длинну массива&lt;br /&gt;
arr.push(4)           // добавить в конец массива элемент со значением '4'&lt;br /&gt;
arr.unshift(0)        // добавить в начало массива элемент со значением '0'&lt;br /&gt;
arr.pop()             // удалить последний элемент массива&lt;br /&gt;
arr.shift()           // удалить первый элемент массива&lt;br /&gt;
arr.slice(start,end)  // возращает часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
arr.splice(start,end) // удаляет часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поиск в массиве из словарей:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {2+3}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экранирование спецсимволов '$','{','}' происходит путем добавления наклонной черты '\'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;price: 4.99\$ \{sale\}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)                       // выведет: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // получить длинну строки&lt;br /&gt;
sub = str.substring(3,5)   // получить подстроку начиная с 3-й позиции и до 5-й не включая&lt;br /&gt;
pos = str.search('lo')     // получить позицию подстроки, иначе -1&lt;br /&gt;
pos = str.search(/lo/)     // получить позицию подстроки используя регулярное выражение, иначе -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-in&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''in''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор '''in''' проверяет есть ли значение в массиве либо является ключём в словаре.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;]             // массив&lt;br /&gt;
print(&amp;quot;hello&amp;quot; in sArr)               // вернет true, т.к. значение &amp;quot;hello&amp;quot; присутствует в массиве sArr &lt;br /&gt;
sDic = { price: 100, food: &amp;quot;Wine&amp;quot;}   // словарь&lt;br /&gt;
print(&amp;quot;food&amp;quot; in sDic)                // вернет true, т.к. ключ &amp;quot;food&amp;quot; присутствует в словаре sDic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку&lt;br /&gt;
с необходимым текстом и логику, которая должна быть&lt;br /&gt;
выполнена при нажатии&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если obj - это сторока, то она выводится не зависимо от текущего языка. Если obj - объект, то он должен состоять из двубуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку, находящуюся по адресу '''url'''. Необязательный параметр '''width'''&lt;br /&gt;
указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=58</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=58"/>
		<updated>2022-04-07T10:02:08Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
sRegExp = /[abc]/                    // регулярное выражение&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;len = arr.length      // получить длинну массива&lt;br /&gt;
arr.push(4)           // добавить в конец массива элемент со значением '4'&lt;br /&gt;
arr.unshift(0)        // добавить в начало массива элемент со значением '0'&lt;br /&gt;
arr.pop()             // удалить последний элемент массива&lt;br /&gt;
arr.shift()           // удалить первый элемент массива&lt;br /&gt;
arr.slice(start,end)  // возращает часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
arr.splice(start,end) // удаляет часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поиск в массиве из словарей:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {2+3}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экранирование спецсимволов '$','{','}' происходит путем добавления наклонной черты '\'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;price: 4.99\$ \{sale\}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)                       // выведет: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // получить длинну строки&lt;br /&gt;
sub = str.substring(3,5)   // получить подстроку начиная с 3-й позиции и до 5-й не включая&lt;br /&gt;
pos = str.search('lo')     // получить позицию подстроки, иначе -1&lt;br /&gt;
pos = str.search(/lo/)     // получить позицию подстроки используя регулярное выражение, иначе -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-in&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''in''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор '''in''' проверяет есть ли значение в массиве либо является ключём в словаре.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;]             // массив&lt;br /&gt;
print(&amp;quot;hello&amp;quot; in sArr)               // вернет true, т.к. значение &amp;quot;hello&amp;quot; присутствует в массиве sArr &lt;br /&gt;
sDic = { price: 100, food: &amp;quot;Wine&amp;quot;}   // словарь&lt;br /&gt;
print(&amp;quot;food&amp;quot; in sDic)                // вернет true, т.к. ключ &amp;quot;food&amp;quot; присутствует в словаре sDic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку&lt;br /&gt;
с необходимым текстом и логику, которая должна быть&lt;br /&gt;
выполнена при нажатии&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если obj - это сторока, то она выводится не зависимо от текущего языка. Если obj - объект, то он должен состоять из двубуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку, находящуюся по адресу '''url'''. Необязательный параметр '''width'''&lt;br /&gt;
указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=57</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=57"/>
		<updated>2022-04-06T18:52:50Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: /* Оператор in */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;len = arr.length      // получить длинну массива&lt;br /&gt;
arr.push(4)           // добавить в конец массива элемент со значением '4'&lt;br /&gt;
arr.unshift(0)        // добавить в начало массива элемент со значением '0'&lt;br /&gt;
arr.pop()             // удалить последний элемент массива&lt;br /&gt;
arr.shift()           // удалить первый элемент массива&lt;br /&gt;
arr.slice(start,end)  // возращает часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
arr.splice(start,end) // удаляет часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поиск в массиве из словарей:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {2+3}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экранирование спецсимволов '$','{','}' происходит путем добавления наклонной черты '\'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;price: 4.99\$ \{sale\}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)                       // выведет: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // получить длинну строки&lt;br /&gt;
sub = str.substring(3,5)   // получить подстроку начиная с 3-й позиции и до 5-й не включая&lt;br /&gt;
pos = str.search('lo')     // получить позицию подстроки, иначе -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-in&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''in''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор '''in''' проверяет есть ли значение в массиве либо является ключём в словаре.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;]             // массив&lt;br /&gt;
print(&amp;quot;hello&amp;quot; in sArr)               // вернет true, т.к. значение &amp;quot;hello&amp;quot; присутствует в массиве sArr &lt;br /&gt;
sDic = { price: 100, food: &amp;quot;Wine&amp;quot;}   // словарь&lt;br /&gt;
print(&amp;quot;food&amp;quot; in sDic)                // вернет true, т.к. ключ &amp;quot;food&amp;quot; присутствует в словаре sDic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку&lt;br /&gt;
с необходимым текстом и логику, которая должна быть&lt;br /&gt;
выполнена при нажатии&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если obj - это сторока, то она выводится не зависимо от текущего языка. Если obj - объект, то он должен состоять из двубуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку, находящуюся по адресу '''url'''. Необязательный параметр '''width'''&lt;br /&gt;
указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=56</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=56"/>
		<updated>2022-04-06T18:51:41Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;len = arr.length      // получить длинну массива&lt;br /&gt;
arr.push(4)           // добавить в конец массива элемент со значением '4'&lt;br /&gt;
arr.unshift(0)        // добавить в начало массива элемент со значением '0'&lt;br /&gt;
arr.pop()             // удалить последний элемент массива&lt;br /&gt;
arr.shift()           // удалить первый элемент массива&lt;br /&gt;
arr.slice(start,end)  // возращает часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
arr.splice(start,end) // удаляет часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поиск в массиве из словарей:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {2+3}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экранирование спецсимволов '$','{','}' происходит путем добавления наклонной черты '\'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;price: 4.99\$ \{sale\}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)                       // выведет: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // получить длинну строки&lt;br /&gt;
sub = str.substring(3,5)   // получить подстроку начиная с 3-й позиции и до 5-й не включая&lt;br /&gt;
pos = str.search('lo')     // получить позицию подстроки, иначе -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-in&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''in''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор '''in''' проверяет есть ли значение в массиве либо является ключём в словаре.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
print(&amp;quot;hello&amp;quot; in sArr)               // вернет true, т.к. значение &amp;quot;hello&amp;quot; присутствует в массиве sArr &lt;br /&gt;
sDic = { price: 100, food: &amp;quot;Wine&amp;quot;}   // словарь&lt;br /&gt;
print(&amp;quot;food&amp;quot; in sDic)                // вернет true, т.к. ключ &amp;quot;food&amp;quot; присутствует в словаре sDic&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку&lt;br /&gt;
с необходимым текстом и логику, которая должна быть&lt;br /&gt;
выполнена при нажатии&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если obj - это сторока, то она выводится не зависимо от текущего языка. Если obj - объект, то он должен состоять из двубуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку, находящуюся по адресу '''url'''. Необязательный параметр '''width'''&lt;br /&gt;
указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=55</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=55"/>
		<updated>2022-04-06T14:35:34Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: /* Работа со строками */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;len = arr.length      // получить длинну массива&lt;br /&gt;
arr.push(4)           // добавить в конец массива элемент со значением '4'&lt;br /&gt;
arr.unshift(0)        // добавить в начало массива элемент со значением '0'&lt;br /&gt;
arr.pop()             // удалить последний элемент массива&lt;br /&gt;
arr.shift()           // удалить первый элемент массива&lt;br /&gt;
arr.slice(start,end)  // возращает часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
arr.splice(start,end) // удаляет часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поиск в массиве из словарей:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {2+3}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экранирование спецсимволов '$','{','}' происходит путем добавления наклонной черты '\'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;price: 4.99\$ \{sale\}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)                       // выведет: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // получить длинну строки&lt;br /&gt;
sub = str.substring(3,5)   // получить подстроку начиная с 3-й позиции и до 5-й не включая&lt;br /&gt;
pos = str.search('lo')     // получить позицию подстроки, иначе -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку&lt;br /&gt;
с необходимым текстом и логику, которая должна быть&lt;br /&gt;
выполнена при нажатии&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если obj - это сторока, то она выводится не зависимо от текущего языка. Если obj - объект, то он должен состоять из двубуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку, находящуюся по адресу '''url'''. Необязательный параметр '''width'''&lt;br /&gt;
указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=54</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=54"/>
		<updated>2022-04-06T14:33:44Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: /* Работа со строками */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;len = arr.length      // получить длинну массива&lt;br /&gt;
arr.push(4)           // добавить в конец массива элемент со значением '4'&lt;br /&gt;
arr.unshift(0)        // добавить в начало массива элемент со значением '0'&lt;br /&gt;
arr.pop()             // удалить последний элемент массива&lt;br /&gt;
arr.shift()           // удалить первый элемент массива&lt;br /&gt;
arr.slice(start,end)  // возращает часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
arr.splice(start,end) // удаляет часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поиск в массиве из словарей:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {2+3}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экранирование происходит путем добавления символа '\'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;price: 4.99\$ \{sale\}&amp;quot;   // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)                     // выведет: &amp;quot;price: 4.99$ {sale}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // получить длинну строки&lt;br /&gt;
sub = str.substring(3,5)   // получить подстроку начиная с 3-й позиции и до 5-й не включая&lt;br /&gt;
pos = str.search('lo')     // получить позицию подстроки, иначе -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку&lt;br /&gt;
с необходимым текстом и логику, которая должна быть&lt;br /&gt;
выполнена при нажатии&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если obj - это сторока, то она выводится не зависимо от текущего языка. Если obj - объект, то он должен состоять из двубуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку, находящуюся по адресу '''url'''. Необязательный параметр '''width'''&lt;br /&gt;
указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=53</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=53"/>
		<updated>2022-03-31T05:49:46Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: /* Локальные переменные */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' недоступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;len = arr.length      // получить длинну массива&lt;br /&gt;
arr.push(4)           // добавить в конец массива элемент со значением '4'&lt;br /&gt;
arr.unshift(0)        // добавить в начало массива элемент со значением '0'&lt;br /&gt;
arr.pop()             // удалить последний элемент массива&lt;br /&gt;
arr.shift()           // удалить первый элемент массива&lt;br /&gt;
arr.slice(start,end)  // возращает часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
arr.splice(start,end) // удаляет часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поиск в массиве из словарей:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их двойными фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {{2+3}}&amp;quot; // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // получить длинну строки&lt;br /&gt;
sub = str.substring(3,5)   // получить подстроку начиная с 3-й позиции и до 5-й не включая&lt;br /&gt;
pos = str.search('lo')     // получить позицию подстроки, иначе -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку&lt;br /&gt;
с необходимым текстом и логику, которая должна быть&lt;br /&gt;
выполнена при нажатии&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если obj - это сторока, то она выводится не зависимо от текущего языка. Если obj - объект, то он должен состоять из двубуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку, находящуюся по адресу '''url'''. Необязательный параметр '''width'''&lt;br /&gt;
указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=52</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=52"/>
		<updated>2022-03-30T15:48:51Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: /* Оператор выбора switch */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' не доступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;len = arr.length      // получить длинну массива&lt;br /&gt;
arr.push(4)           // добавить в конец массива элемент со значением '4'&lt;br /&gt;
arr.unshift(0)        // добавить в начало массива элемент со значением '0'&lt;br /&gt;
arr.pop()             // удалить последний элемент массива&lt;br /&gt;
arr.shift()           // удалить первый элемент массива&lt;br /&gt;
arr.slice(start,end)  // возращает часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
arr.splice(start,end) // удаляет часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поиск в массиве из словарей:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их двойными фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {{2+3}}&amp;quot; // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // получить длинну строки&lt;br /&gt;
sub = str.substring(3,5)   // получить подстроку начиная с 3-й позиции и до 5-й не включая&lt;br /&gt;
pos = str.search('lo')     // получить позицию подстроки, иначе -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок '''case''' и необязательный блок '''default'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку&lt;br /&gt;
с необходимым текстом и логику, которая должна быть&lt;br /&gt;
выполнена при нажатии&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если obj - это сторока, то она выводится не зависимо от текущего языка. Если obj - объект, то он должен состоять из двубуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку, находящуюся по адресу '''url'''. Необязательный параметр '''width'''&lt;br /&gt;
указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=51</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=51"/>
		<updated>2022-03-30T15:48:20Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: /* Оператор выбора switch */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' не доступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;len = arr.length      // получить длинну массива&lt;br /&gt;
arr.push(4)           // добавить в конец массива элемент со значением '4'&lt;br /&gt;
arr.unshift(0)        // добавить в начало массива элемент со значением '0'&lt;br /&gt;
arr.pop()             // удалить последний элемент массива&lt;br /&gt;
arr.shift()           // удалить первый элемент массива&lt;br /&gt;
arr.slice(start,end)  // возращает часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
arr.splice(start,end) // удаляет часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поиск в массиве из словарей:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их двойными фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {{2+3}}&amp;quot; // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // получить длинну строки&lt;br /&gt;
sub = str.substring(3,5)   // получить подстроку начиная с 3-й позиции и до 5-й не включая&lt;br /&gt;
pos = str.search('lo')     // получить позицию подстроки, иначе -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция '''switch''' заменяет собой сразу несколько '''if'''. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок case и необязательный блок default.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку&lt;br /&gt;
с необходимым текстом и логику, которая должна быть&lt;br /&gt;
выполнена при нажатии&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если obj - это сторока, то она выводится не зависимо от текущего языка. Если obj - объект, то он должен состоять из двубуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку, находящуюся по адресу '''url'''. Необязательный параметр '''width'''&lt;br /&gt;
указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=50</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=50"/>
		<updated>2022-03-30T15:47:51Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' не доступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;len = arr.length      // получить длинну массива&lt;br /&gt;
arr.push(4)           // добавить в конец массива элемент со значением '4'&lt;br /&gt;
arr.unshift(0)        // добавить в начало массива элемент со значением '0'&lt;br /&gt;
arr.pop()             // удалить последний элемент массива&lt;br /&gt;
arr.shift()           // удалить первый элемент массива&lt;br /&gt;
arr.slice(start,end)  // возращает часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
arr.splice(start,end) // удаляет часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поиск в массиве из словарей:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их двойными фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {{2+3}}&amp;quot; // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // получить длинну строки&lt;br /&gt;
sub = str.substring(3,5)   // получить подстроку начиная с 3-й позиции и до 5-й не включая&lt;br /&gt;
pos = str.search('lo')     // получить позицию подстроки, иначе -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-switch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор выбора '''switch''' ==&lt;br /&gt;
&lt;br /&gt;
Конструкция switch заменяет собой сразу несколько if. Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.&lt;br /&gt;
Имеет один или более блок case и необязательный блок default.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 'one'&lt;br /&gt;
switch(a)&lt;br /&gt;
{&lt;br /&gt;
   case 'one': print('one'); break;&lt;br /&gt;
   case 'two': print('two'); break;&lt;br /&gt;
   default: print('def')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная проверяется на строгое соответствие значению справа от '''case''' и если оно совпадает, то выполняется код до тех пор пока не встретится &lt;br /&gt;
оператор '''break'''&lt;br /&gt;
&lt;br /&gt;
Если ни одно из '''case''' не подошло, выполняется код справа от '''default'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку&lt;br /&gt;
с необходимым текстом и логику, которая должна быть&lt;br /&gt;
выполнена при нажатии&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если obj - это сторока, то она выводится не зависимо от текущего языка. Если obj - объект, то он должен состоять из двубуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку, находящуюся по адресу '''url'''. Необязательный параметр '''width'''&lt;br /&gt;
указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=49</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=49"/>
		<updated>2022-03-30T15:36:29Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' не доступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;len = arr.length      // получить длинну массива&lt;br /&gt;
arr.push(4)           // добавить в конец массива элемент со значением '4'&lt;br /&gt;
arr.unshift(0)        // добавить в начало массива элемент со значением '0'&lt;br /&gt;
arr.pop()             // удалить последний элемент массива&lt;br /&gt;
arr.shift()           // удалить первый элемент массива&lt;br /&gt;
arr.slice(start,end)  // возращает часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
arr.splice(start,end) // удаляет часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поиск в массиве из словарей:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их двойными фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {{2+3}}&amp;quot; // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // получить длинну строки&lt;br /&gt;
sub = str.substring(3,5)   // получить подстроку начиная с 3-й позиции и до 5-й не включая&lt;br /&gt;
pos = str.search('lo')     // получить позицию подстроки, иначе -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку&lt;br /&gt;
с необходимым текстом и логику, которая должна быть&lt;br /&gt;
выполнена при нажатии&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если obj - это сторока, то она выводится не зависимо от текущего языка. Если obj - объект, то он должен состоять из двубуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку, находящуюся по адресу '''url'''. Необязательный параметр '''width'''&lt;br /&gt;
указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=48</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=48"/>
		<updated>2022-03-30T14:13:34Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: /* Работа с массивами */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' не доступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;len = arr.length      // получить длинну массива&lt;br /&gt;
arr.push(4)           // добавить в конец массива элемент со значением '4'&lt;br /&gt;
arr.unshift(0)        // добавить в начало массива элемент со значением '0'&lt;br /&gt;
arr.pop()             // удалить последний элемент массива&lt;br /&gt;
arr.shift()           // удалить первый элемент массива&lt;br /&gt;
arr.slice(start,end)  // возращает часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
arr.splice(start,end) // удаляет часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поиск в массиве из словарей:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все объекты у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их двойными фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {{2+3}}&amp;quot; // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // получить длинну строки&lt;br /&gt;
sub = str.substring(3,5)   // получить подстроку начиная с 3-й позиции и до 5-й не включая&lt;br /&gt;
pos = str.search('lo')     // получить позицию подстроки, иначе -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку&lt;br /&gt;
с необходимым текстом и логику, которая должна быть&lt;br /&gt;
выполнена при нажатии&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если obj - это сторока, то она выводится не зависимо от текущего языка. Если obj - объект, то он должен состоять из двубуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку, находящуюся по адресу '''url'''. Необязательный параметр '''width'''&lt;br /&gt;
указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=47</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=47"/>
		<updated>2022-03-30T14:12:54Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: /* Работа с массивами */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' не доступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;len = arr.length      // получить длинну массива&lt;br /&gt;
arr.push(4)           // добавить в конец массива элемент со значением '4'&lt;br /&gt;
arr.unshift(0)        // добавить в начало массива элемент со значением '0'&lt;br /&gt;
arr.pop()             // удалить последний элемент массива&lt;br /&gt;
arr.shift()           // удалить первый элемент массива&lt;br /&gt;
arr.slice(start,end)  // возращает часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
arr.splice(start,end) // удаляет часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поиск в массиве из словарей:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [                            // массив из трех объектов&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все словари у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их двойными фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {{2+3}}&amp;quot; // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // получить длинну строки&lt;br /&gt;
sub = str.substring(3,5)   // получить подстроку начиная с 3-й позиции и до 5-й не включая&lt;br /&gt;
pos = str.search('lo')     // получить позицию подстроки, иначе -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку&lt;br /&gt;
с необходимым текстом и логику, которая должна быть&lt;br /&gt;
выполнена при нажатии&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если obj - это сторока, то она выводится не зависимо от текущего языка. Если obj - объект, то он должен состоять из двубуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку, находящуюся по адресу '''url'''. Необязательный параметр '''width'''&lt;br /&gt;
указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=46</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=46"/>
		<updated>2022-03-30T14:11:22Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' не доступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;len = arr.length      // получить длинну массива&lt;br /&gt;
arr.push(4)           // добавить в конец массива элемент со значением '4'&lt;br /&gt;
arr.unshift(0)        // добавить в начало массива элемент со значением '0'&lt;br /&gt;
arr.pop()             // удалить последний элемент массива&lt;br /&gt;
arr.shift()           // удалить первый элемент массива&lt;br /&gt;
arr.slice(start,end)  // возращает часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
arr.splice(start,end) // удаляет часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поиск в массиве из словарей:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все словари у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их двойными фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {{2+3}}&amp;quot; // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // получить длинну строки&lt;br /&gt;
sub = str.substring(3,5)   // получить подстроку начиная с 3-й позиции и до 5-й не включая&lt;br /&gt;
pos = str.search('lo')     // получить позицию подстроки, иначе -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку&lt;br /&gt;
с необходимым текстом и логику, которая должна быть&lt;br /&gt;
выполнена при нажатии&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если obj - это сторока, то она выводится не зависимо от текущего языка. Если obj - объект, то он должен состоять из двубуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку, находящуюся по адресу '''url'''. Необязательный параметр '''width'''&lt;br /&gt;
указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=45</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=45"/>
		<updated>2022-03-30T14:09:41Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: /* Работа с массивами */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' не доступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;len = arr.length      // получить длинну массива&lt;br /&gt;
arr.push(4)           // добавить в конец массива элемент со значением '4'&lt;br /&gt;
arr.unshift(0)        // добавить в начало массива элемент со значением '0'&lt;br /&gt;
arr.pop()             // удалить последний элемент массива&lt;br /&gt;
arr.shift()           // удалить первый элемент массива&lt;br /&gt;
arr.slice(start,end)  // возращает часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
arr.splice(start,end) // удаляет часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поиск в массиве из словарей:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [&lt;br /&gt;
  {title: &amp;quot;Wine&amp;quot;, price: 120},&lt;br /&gt;
  {title: &amp;quot;Cheese&amp;quot;, price: 100},&lt;br /&gt;
  {title: &amp;quot;Cola&amp;quot;, price: 40},&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
local res = arr.find(price &amp;gt; 80)   // найти все словари у которых поле 'price' больше 80 и вернуть их в массиве&lt;br /&gt;
print('найдено $res.length:')      // выведет количество найденных объектов&lt;br /&gt;
print(res)                         // выведет объекты, удовлетворяющие условию&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их двойными фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {{2+3}}&amp;quot; // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // получить длинну строки&lt;br /&gt;
sub = str.substring(3,5)   // получить подстроку начиная с 3-й позиции и до 5-й не включая&lt;br /&gt;
pos = str.search('lo')     // получить позицию подстроки, иначе -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку&lt;br /&gt;
с необходимым текстом и логику, которая должна быть&lt;br /&gt;
выполнена при нажатии&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если obj - это сторока, то она выводится не зависимо от текущего языка. Если obj - объект, то он должен состоять из двубуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку, находящуюся по адресу '''url'''. Необязательный параметр '''width'''&lt;br /&gt;
указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=44</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=44"/>
		<updated>2022-03-30T13:57:17Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: /* Работа с массивами */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' не доступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
arr = [1,2,3]         // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;len = arr.length      // получить длинну массива&lt;br /&gt;
arr.push(4)           // добавить в конец массива элемент со значением '4'&lt;br /&gt;
arr.unshift(0)        // добавить в начало массива элемент со значением '0'&lt;br /&gt;
arr.pop()             // удалить последний элемент массива&lt;br /&gt;
arr.shift()           // удалить первый элемент массива&lt;br /&gt;
arr.slice(start,end)  // возращает часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
arr.splice(start,end) // удаляет часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их двойными фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {{2+3}}&amp;quot; // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // получить длинну строки&lt;br /&gt;
sub = str.substring(3,5)   // получить подстроку начиная с 3-й позиции и до 5-й не включая&lt;br /&gt;
pos = str.search('lo')     // получить позицию подстроки, иначе -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку&lt;br /&gt;
с необходимым текстом и логику, которая должна быть&lt;br /&gt;
выполнена при нажатии&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если obj - это сторока, то она выводится не зависимо от текущего языка. Если obj - объект, то он должен состоять из двубуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку, находящуюся по адресу '''url'''. Необязательный параметр '''width'''&lt;br /&gt;
указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=43</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=43"/>
		<updated>2022-03-30T12:55:10Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: /* Работа со строками */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' не доступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;arr = [1,2,3]   // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;len = arr.length      // получить длинну массива&lt;br /&gt;
arr.push(4)           // добавить в конец массива элемент со значением '4'&lt;br /&gt;
arr.unshift(0)        // добавить в начало массива элемент со значением '0'&lt;br /&gt;
arr.pop()             // удалить последний элемент массива&lt;br /&gt;
arr.shift()           // удалить первый элемент массива&lt;br /&gt;
arr.slice(start,end)  // возращает часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
arr.splice(start,end) // удаляет часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их двойными фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {{2+3}}&amp;quot; // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // получить длинну строки&lt;br /&gt;
sub = str.substring(3,5)   // получить подстроку начиная с 3-й позиции и до 5-й не включая&lt;br /&gt;
pos = str.search('lo')     // получить позицию подстроки, иначе -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку&lt;br /&gt;
с необходимым текстом и логику, которая должна быть&lt;br /&gt;
выполнена при нажатии&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если obj - это сторока, то она выводится не зависимо от текущего языка. Если obj - объект, то он должен состоять из двубуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку, находящуюся по адресу '''url'''. Необязательный параметр '''width'''&lt;br /&gt;
указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=42</id>
		<title>Qubot Script/ru</title>
		<link rel="alternate" type="text/html" href="https://wiki.qudata.com//index.php?title=Qubot_Script/ru&amp;diff=42"/>
		<updated>2022-03-30T12:46:57Z</updated>

		<summary type="html">&lt;p&gt;Abeyn: /* Работа со строками */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;qubot-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
== Qubot Script ==&lt;br /&gt;
&lt;br /&gt;
'''''Qubot Script''''' - это язык программирования, используемый для выполнения логических и математических операций при решении задач бота&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;объявление-слотов-переменных&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Слоты ==&lt;br /&gt;
&lt;br /&gt;
'''Слот''' - это переменная, значение которой доступно во всех состояниях бота. Также значение слота сохраняется, если бота закрыли и продолжили&lt;br /&gt;
с ним работать через время.&lt;br /&gt;
&lt;br /&gt;
Объявление слота происходит при первом присваивании в него значений. &amp;lt;br&amp;gt; Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
объявляет слот с именем '''a''' и присваивает ему значение '''7'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Локальные переменные ==&lt;br /&gt;
&lt;br /&gt;
В отличие от слотов локальные переменные сохраняются только внутри скрипта, где они объявлены. &amp;lt;br&amp;gt;&lt;br /&gt;
Объявление происходит путем добавления перед именем служебного слова '''local''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если локальная переменная объявлена внутри фигурных скобок '''{}''', то и ее значение доступно только там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
local b = 8    // локальная переменная текущего скрипта&lt;br /&gt;
&lt;br /&gt;
if (b == 8)&lt;br /&gt;
{&lt;br /&gt;
   local c = 9 // локальная переменная блока оператора 'if'&lt;br /&gt;
   print(c)    // выведет 9&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(b)       // выведет 8 &lt;br /&gt;
print(c)       // выдаст ошибку, т.к. тут уже переменная 'с' не доступна&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;типы-слотов&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Типы переменных ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
sInt = 7                             // целочисленный&lt;br /&gt;
sFloat = 7.3                         // вещественный&lt;br /&gt;
sStr = &amp;quot;hello&amp;quot;                       // строковый&lt;br /&gt;
sArr = [7, 7.3, &amp;quot;hello&amp;quot;, sStr]       // массив&lt;br /&gt;
sDic = { n: 1, s: &amp;quot;Wine&amp;quot;  }          // словарь&lt;br /&gt;
sBool = true                         // бинарный&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;логические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Логические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''and''' - логическое ‘И’&lt;br /&gt;
* '''or''' - логическое ‘ИЛИ’&lt;br /&gt;
* '''not''' - отрицание ‘НЕТ’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
a = true&lt;br /&gt;
b = false&lt;br /&gt;
c = true&lt;br /&gt;
res = not((a and b) or c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;арифметические-операции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Арифметические операции ==&lt;br /&gt;
&lt;br /&gt;
* '''+''' - сложение&lt;br /&gt;
* '''-''' - вычитание&lt;br /&gt;
* '''*''' - умножение&lt;br /&gt;
* '''/''' - деление&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;res = 2+3-4*5+(1.5-0.2/2)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
&lt;br /&gt;
Комментарии используются для документирования фрагментов скрипта.&lt;br /&gt;
Могут быть многострочыми и однострочными:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Пример&lt;br /&gt;
    многострочного&lt;br /&gt;
        комментария&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
a = 2253 // пример однострочного комментария&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;условный-оператор&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условный оператор ==&lt;br /&gt;
Оператор '''if''' используется, если необходимо ветвление логики в зависимости от условия&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 9&lt;br /&gt;
if (a &amp;gt; 7) &lt;br /&gt;
{&lt;br /&gt;
    res = 'a more than 7'&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    res = 'a less or equal 7'&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере проверяется условие &amp;lt;code&amp;gt;a &amp;amp;gt; 7&amp;lt;/code&amp;gt; и если оно истинно, то выполняется первый блок скрипта, окруженный фигурными скобками, иначе выполняется блок после служебного слова '''else'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;цикл-while&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Цикл '''while''' ==&lt;br /&gt;
&lt;br /&gt;
Оператор цикла проверяет условие и пока оно истинно, выполняет код окруженный фигурными скобками&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = 7&lt;br /&gt;
while (a &amp;gt; 0) &lt;br /&gt;
{&lt;br /&gt;
    a = a - 1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере скрипт &amp;lt;code&amp;gt;a = a - 1&amp;lt;/code&amp;gt; будет выполнятся до тех пор пока значение слота &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; не станет равным нулю&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;итератор-for&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Итератор '''for''' ==&lt;br /&gt;
&lt;br /&gt;
Итератор используется для перебора всех значений массива, либо ключей из словаря&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;arr = [3,2,1]&lt;br /&gt;
for(val in arr)&lt;br /&gt;
{&lt;br /&gt;
    print(val)&lt;br /&gt;
}&lt;br /&gt;
output:&lt;br /&gt;
3&lt;br /&gt;
2&lt;br /&gt;
1&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В данном примере цикл последовательно перебирает значения массива и заносит их во временную переменную '''val''' соответственно для каждого элемента массива выполняется окруженный фигурными скобками скрипт '''print(val)''' выводящий значение в отладочное окно&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-с-массивами&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с массивами ==&lt;br /&gt;
&lt;br /&gt;
Объявление массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;arr = [1,2,3]   // создает массив с тремя элементами со значениями 1,2,3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к элементам массива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;first  = arr[0]       // получить первый элемент массива&lt;br /&gt;
last   = arr[-1]      // получить последний элемент массива&lt;br /&gt;
last   = arr[-2]      // получить предпоследний элемент массива&lt;br /&gt;
arr[0] = 7            // изменить значение первого элемента&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Функции работы с массивом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;len = arr.length      // получить длинну массива&lt;br /&gt;
arr.push(4)           // добавить в конец массива элемент со значением '4'&lt;br /&gt;
arr.unshift(0)        // добавить в начало массива элемент со значением '0'&lt;br /&gt;
arr.pop()             // удалить последний элемент массива&lt;br /&gt;
arr.shift()           // удалить первый элемент массива&lt;br /&gt;
arr.slice(start,end)  // возращает часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
arr.splice(start,end) // удаляет часть массива начиная с позиции 'start' и указана позиция 'end', то до нее (не включая)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-словарем-объектом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со словарем (объектом) ==&lt;br /&gt;
&lt;br /&gt;
Объявление словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;dic = { n: 1, s: &amp;quot;Wine&amp;quot;  } &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступ к значениям словаря:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;a = dic.n             // доступ к полю с именем &amp;quot;n&amp;quot; через точку  &lt;br /&gt;
a = dic[&amp;quot;n&amp;quot;]          // доступ к полю с именем &amp;quot;n&amp;quot; через оператор доступа&lt;br /&gt;
dic[&amp;quot;food&amp;quot;] = &amp;quot;milk&amp;quot;  // добавление в словарь пары ключ-значение&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;работа-со-строками&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа со строками ==&lt;br /&gt;
&lt;br /&gt;
Объявление строковых слотов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;           // используя двойные кавычки &lt;br /&gt;
str = 'hello'           // используя одинарные кавычки&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Операции со строками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
base = 'http://imgs/'&lt;br /&gt;
url = base + 'img1.png' // сложение строк&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подстановка слотов в строки:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
a = 5&lt;br /&gt;
str = &amp;quot;a = $a&amp;quot;          // вместо $a будет подставлено значение слота a&lt;br /&gt;
print(str)              // выведет: &amp;quot;a = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставка выражений в строки:&lt;br /&gt;
&lt;br /&gt;
Выражения можно вставлять в строки, обрамляя их двойными фигурными скобками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;2 + 3 = {{2+3}}&amp;quot; // вычислит выражение и вставит результат в строку&lt;br /&gt;
print(str)              // выведет: &amp;quot;2 + 3 = 5&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции работы со строками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
len = str.length           // получить длинну строки&lt;br /&gt;
sub = str.substring(3,5)   // получить подстроку начиная с 3-й позиции и до 5-й не включая&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-перехода&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции перехода ==&lt;br /&gt;
&lt;br /&gt;
'''''run(state)''''' - выполнить логику шага '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''step(state)''''' - установка шага перехода по умолчанию в значение '''state'''&lt;br /&gt;
&lt;br /&gt;
'''''goto(state)''''' - мгновенный переход в шаг '''state'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;оператор-button&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оператор '''button''' ==&lt;br /&gt;
&lt;br /&gt;
Данный оператор добавляет в интерфейс кнопку&lt;br /&gt;
с необходимым текстом и логику, которая должна быть&lt;br /&gt;
выполнена при нажатии&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
button('click me')      // текст в кнопке&lt;br /&gt;
{&lt;br /&gt;
    // скрипт, который выполнится после нажатия &lt;br /&gt;
    print('button was clicked!')&lt;br /&gt;
    step('STATE_AFTER_CLICK')&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку скрипт будет выполнен в контексте локальных переменных на момент добавления данной кнопки, а также в контексте&lt;br /&gt;
значений слотов на момент нажатия на кнопку!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;функции-работы-с-контентом&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Функции работы с контентом ==&lt;br /&gt;
&lt;br /&gt;
'''''text(obj)''''' - вывести в текущее сообщение текст. Если obj - это сторока, то она выводится не зависимо от текущего языка. Если obj - объект, то он должен состоять из двубуквенных ключей (идентификаторов языка: en, ru,…) со строковыми значения на этих языках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
text(&amp;quot;Hi world!&amp;quot;)     &lt;br /&gt;
text({ en: &amp;quot;Hi world!&amp;quot;, ru: &amp;quot;Привет мир!&amp;quot;, es: &amp;quot;¡Hola mundo!&amp;quot;})  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''images()''''' - создать новую строку картинок. Каждый последующий вызов image будет добавляться в эту строку, пока снова не будет вызван images().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;  &lt;br /&gt;
images()     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)     &lt;br /&gt;
image(URL + &amp;quot;owl_b.png&amp;quot;) &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''image(url, width)''''' - вывести в текущее сообщение картинку, находящуюся по адресу '''url'''. Необязательный параметр '''width'''&lt;br /&gt;
указывает насколько в процентах нужно сжать изображение &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
URL = &amp;quot;https://qudata.com/qubot/im/&amp;quot;     &lt;br /&gt;
image(URL + &amp;quot;owl_a.png&amp;quot;)  &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''buttons()''''' - создать новую строку кнопок. Каждый последующий вызов button будет добавляться в эту строку, пока снова не будет вызван buttons().&lt;br /&gt;
&lt;br /&gt;
'''''get_check()''''' - получить массив значений кнопок типа check (1 - нажата, 0 - отжата)&lt;br /&gt;
&lt;br /&gt;
'''''set_check(list)''''' - задать значения кнопок типа check из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
CHECK = [0,1,0]&lt;br /&gt;
set_check(CHECK) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''get_radio()''''' - получить массив значений кнопок типа radio (1 - нажата, 0 - отжата). Единица будет одна.&lt;br /&gt;
&lt;br /&gt;
'''''set_radio(list)''''' - задать значения кнопок типа radio из массива list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;отладчные-функции&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Отладчные функции ==&lt;br /&gt;
&lt;br /&gt;
'''''print(args)''''' - вывод информации в окно отладки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;округление&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Округление ==&lt;br /&gt;
&lt;br /&gt;
'''''floor(val)''''' - округление чисел в меньшую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;floor(5.8)    //  5&lt;br /&gt;
floor(-6.1)   // -7&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''trunc(val)''''' - отбрасывание дробной части:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;trunc(5.51)   //  5&lt;br /&gt;
trunc(-6.99)  // -6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''ceil(val)''''' - округление чисел в большую сторону:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;ceil(5.15)    // 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''''round(val, num)''''' - округление '''val''' до '''num''' чисел после запятой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;round(3.14159265, 2)  // 3.14&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;случайные-числа&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Случайные числа ==&lt;br /&gt;
&lt;br /&gt;
'''''randint(min,max)''''' - возвращает целое случайное число в диапазоне [min,max].&lt;br /&gt;
&lt;br /&gt;
'''''random()''''' - возвращает случайное вещественное число в диапазоне [0,1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Qubot]]&lt;/div&gt;</summary>
		<author><name>Abeyn</name></author>
		
	</entry>
</feed>