Онлайн-справочник по самым часто задаваемым вопросам из темы "Как сделать?" на форуме QSP.su
Операции
[:faq_80_01_00]Список операций для плеера версии 5.7.0 в порядке возрастания приоритета:
`&`
`OR`
`AND`
`OBJ`, `LOC`, `NO`
`=`, `<`, `>`, `!`, `<>`, `<=`, `>=`, `=<`, `=>`
`+`, `-`
`MOD`
`*`, `/`
`+`, `-` (унарные)
Операции записанные на одной строке имеют одинаковый приоритет и выполняются по порядку слева направо, если присутствуют на одном уровне в выражении.
Операции в скобках имеют приоритет перед другими операциями.
Вычисение значений функций имеет приоритет перед всеми операциями.
Верным считается числовое выражение, значение которого отлично от 0. При значении 0 выражение считается ложным. Для значения "верно" настоятельно рекомендуется использовать -1, т.к. только в этом случае будут адекватно работать побитовые операторы в роли логических.
В более новых версиях плеера приоритет некоторых операций изменён.
* (умножение)
`*` — арифметическая операция "УМНОЖЕНИЕ". Перемножает два числа. Общая запись:
, где `[#выражение 1]` и `[#выражение 2]` — два любых числовых значения, или выражения. Результатом работы операции является произведение двух чисел.
Примеры:
4*2 & ! вернёт 8
17*5 & ! вернёт 85
37*100 & ! вернёт 3700
*= (умножение-присвоение)
`*=` — операция "УМНОЖЕНИЕ-ПРИСВОЕНИЕ". Сочетает в себе операции присвоения и умножения. Умножает значение указанной переменной на определённое число и возвращает результат той же переменной. Общая запись:
, где `ИМЯ_МАССИВА` — это название переменной (без кавычек), или название массива с указанием ячейки, а `[#выражение 1]` — любое числовое значение или выражение.
Аналогично конструкции:
Пример:
warrior=warrior*2
! на умножение-присвоение (действие аналогично)
warrior*=2
+ (сложение)
`+` — арифметическая операция "СЛОЖЕНИЕ". Суммирует два числа. Общая запись:
, где `[выражение 1]` и `[выражение 2]` — два любых значения, или выражения. Результатом работы операции является сумма двух значений.
Примеры:
4+2 & ! вернёт 6
17+5 & ! вернёт 22
37+100 & ! вернёт 137
Можно "суммировать" и текстовые значения. В этом случае операция работает как конкатенация:
"26"+"27"
+= (сложение-присвоение)
`+= (инкремент)` — операция "ИНКРЕМЕНТ", сочетающая в себе операции присвоения и сложения. Прибавляет к текущему значению переменной указанное значение. Общая запись:
, где `ИМЯ_МАССИВА` — это название переменной (без кавычек), или название массива с указанием ячейки, а `[выражение 1]` — любое значение или выражение.
Аналогично конструкции:
Пример:
warrior=warrior+15
! на инкремент (действие аналогично)
warrior+=15
Возможно так же проводить инкремент со строковыми значениями, работает как конкатенация:
P.S.: Инкремент — во многих языках программирования это операция, которая выполняет увеличение переменной. Чаще всего под инкрементом подразумевается увеличение переменной на 1 единицу.
- (вычитание)
`-` — арифметическая операция "ВЫЧИТАНИЕ". Вычитает одно число из другого. Общая запись:
, где `[выражение 1]` и `[выражение 2]` — два любых значения, или выражения. Результатом работы операции является разность двух значений.
Примеры:
4-2 & ! вернёт 2
17-5 & ! вернёт 12
37-100 & ! вернёт -63
-= (вычитание-присвоение)
`-= (декремент)` — операция "ДЕКРЕМЕНТ", сочетающая в себе операции присвоения и вычитания. Вычитает из текущего значения переменной указанное значение. Общая запись:
, где `ИМЯ_МАССИВА` — это название переменной (без кавычек), или название массива с указанием ячейки, а `[#выражение 1]` — любое числовое значение или выражение.
Аналогично конструкции:
Пример:
warrior=warrior-15
! на декремент (действие аналогично)
warrior-=15
P.S.: Декремент — во многих языках программирования это операция, которая выполняет уменьшение переменной. Чаще всего под декрементом подразумевается уменьшение переменной на 1 единицу.
- и + (унарные)
`унарные + и -` — унарные операции. Общая запись:
-[#выражение]
, где `[#выражение]` — любое числовое значение или выражение. Результатом работы этих операций является то же самое значение, только в случае с унарным минусом — с противоположным знаком.
Примеры:
-(3+6) & ! вернёт -9
+2 & ! вернёт 2
+(3+6) & ! вернёт 9
-(-27) & ! вернёт 27
/ (деление)
`/` — арифметическая операция "ДЕЛЕНИЕ". Общая запись:
, где `[#выражение 1]` и `[#выражение 2]` — два любых числовых значения, или выражения. Значение `[#выражение 2]` не должно быть равным нулю. Результатом работы операции является частное от деления двух чисел.
Поскольку QSP поддерживает только целочисленные значения, деление производится так же нацело, без округления, с отсечением дробной части.
Примеры:
4/2 & ! вернёт 2
17*5 & ! вернёт 3
37*100 & ! вернёт 0
/= (деление-присвоение)
`/=` — операция "ДЕЛЕНИЕ-ПРИСВОЕНИЕ". Сочетает в себе операции присвоения и деления. Делит значение указанной переменной на определённое число и возвращает результат той же переменной. Общая запись:
, где `ИМЯ_МАССИВА` — это название переменной (без кавычек), или название массива с указанием ячейки, а `[#выражение 1]` — любое числовое значение или выражение.
Аналогично конструкции:
Пример:
warrior=warrior/2
! на деление-присвоение (действие аналогично)
warrior/=2
< (меньше)
`<` — операция сравнения "МЕНЬШЕ". Общая запись:
Если значение выражения `[выражение_1]` меньше значения выражения `[выражение_2]` операция вернёт -1, в противном случае вернёт 0. Иными словами: верно, если первое меньше второго.
Примеры:
2<4
! 5 не меньше 5 — вернёт 0
5<5
! 7 не меньше 3 — вернёт 0
7<3
Сравнивать можно и текстовые значения, при этом символы сравниваются поочерёдно, и большим считается символ, стоящий ближе к концу алфавита.
"z"<"zz" & ! верно
"aaaaaa"<"z" & ! верно
<= (меньше либо равно)
`<=` — операция сравнения "МЕНЬШЕ ЛИБО РАВНО". Общая запись:
Если значение выражения `[выражение_1]` меньше либо равно значению выражения `[выражение_2]` операция вернёт -1, в противном случае вернёт 0. Иными словами: верно, если первое меньше второго, либо равно ему.
Примеры:
2<=4
! 5 равно 5 — вернёт -1
5<=5
! 7 не меньше трёх и не равно ему
7<=3 & ! вернёт 0
Аналогично "=<" и конструкциям:
no [выражение_1]>[выражение_2]
Сравнивать можно и текстовые значения, при этом символы сравниваются поочерёдно, и большим считается символ, стоящий ближе к концу алфавита.
"z"<="zz" & ! верно
"aaaaaa"<="z" & ! верно
"z"<="z" & ! верно
<> (не равно)
`<>` — операция сравнения "НЕ РАВНО". Общая запись:
Если значение выражения `[выражение_1]` не равно значению выражения `[выражение_2]` операция вернёт -1, в противном случае вернёт 0. Иными словами: верно, если выражения не равны.
Аналогично "!", или конструкции:
Примеры:
2<>4
! 5 равно 5 — вернёт 0
5<>5
Можно сравнивать и строковые значения:
"abc"<>"abc" & ! вернёт 0
= (равно)
`=` — операция сравнения "РАВНО". Общая запись:
Если значение выражения `[выражение_1]` равно значению выражения `[выражение_2]` операция вернёт -1, в противном случае вернёт 0. Иными словами: верно, если выражения равны.
Аналогично конструкции:
Примеры:
(2=4)
! 5 равно 5 — вернёт -1
(5=5)
Можно сравнивать и строковые значения:
("abc"="abc") & ! вернёт -1
Не путать с операцией присвоения.
= (присвоение)
`=` — операция присвоения. Общая запись:
, где `ИМЯ_МАССИВА` — название переменной (не в кавычках), или название массива с указанием ячейки (не в кавычках), `[значение]` — любое значение или выражение.
Примеры:
BOX=13
! переменной $text присваиваем значение "Строка текста"
$text="Строка текста"
! нулевой ячейке массива day присваивается значение 365
day[0]=365
Имена строковых переменных/массивов должны начинаться с символа `$`.
Внимание! Операцию присвоения не следует путать с операцией сравнения "РАВНО", хотя они очень похожи:
alukard=1000
! операция сравнения
(alukard=1000)
В этом случае плеер понимает, что внутри скобок находится операция сравнения, потому что скобки используются только для записи выражений. Запись:
синтаксически ошибочна. Плеер выдаст ошибку: недопустимое название переменной/массива. Так как в этом случае он не понимает, что это операция сравнения.
Если перед операцией сравнения стоит оператор, скобки можно не писать:
=< (равно либо меньше)
`=<` — операция сравнения "РАВНО ЛИБО МЕНЬШЕ". Общая запись:
Если значение выражения `[выражение_1]` меньше либо равно значению выражения `[выражение_2]` операция вернёт -1, в противном случае вернёт 0. Иными словами: верно, если первое меньше второго, либо равно ему.
Примеры:
2=<4
! 5 равно 5 — вернёт -1
5=<5
! 7 не меньше трёх и не равно ему
7=<3 & ! вернёт 0
Аналогично "<=" и конструкциям:
no [выражение_1]>[выражение_2]
Сравнивать можно и текстовые значения, при этом символы сравниваются поочерёдно, и большим считается символ, стоящий ближе к концу алфавита.
"z"=<"zz" & ! верно
"aaaaaa"=<"z" & ! верно
"z"=<"z" & ! верно
Данная запись, хотя и допустима в QSP, к использованию не рекомендуется. Используйте "<= (меньше либо равно)" вместо этого.
=> (равно или больше)
`=>` — операция сравнения "РАВНО ИЛИ БОЛЬШЕ". Общая запись:
Если значение выражения `[выражение_1]` больше либо равно значению выражения `[выражение_2]` операция вернёт -1, в противном случае вернёт 0. Иными словами: верно, если первое больше второго, либо равно ему.
Примеры:
2=>4
! 5 равно 5 — вернёт -1
5=>5
! 7 больше 3
7=>3 & ! вернёт -1
Аналогично ">=" и конструкциям:
no [выражение_1]<[выражение_2]
Сравнивать можно и текстовые значения, при этом символы сравниваются поочерёдно, и большим считается символ, стоящий ближе к концу алфавита.
"zz"=>"z" & ! верно
"z"=>"aaaaaa" & ! верно
"z"=>"z" & ! верно
Данная запись, хотя и допустима в QSP, к использованию не рекомендуется. Используйте ">= (больше либо равно)" вместо этого.
> (больше)
`>` — операция сравнения "БОЛЬШЕ". Общая запись:
Если значение выражения `[выражение_1]` больше значения выражения `[выражение_2]` операция вернёт -1, в противном случае вернёт 0. Иными словами: верно, если первое больше второго.
Примеры:
2>4
! 5 не больше 5 — вернёт 0
5>5
! 7 больше 3 — вернёт -1
7>3
Сравнивать можно и текстовые значения, при этом символы сравниваются поочерёдно, и большим считается символ, стоящий ближе к концу алфавита.
"zz">"z" & ! верно
"z">"aaaaaa" & ! верно
> (больше либо равно)
`>=` — операция сравнения "БОЛЬШЕ ЛИБО РАВНО". Общая запись:
Если значение выражения `[выражение_1]` больше либо равно значению выражения `[выражение_2]` операция вернёт -1, в противном случае вернёт 0. Иными словами: верно, если первое больше второго, либо равно ему.
Примеры:
2>=4
! 5 равно 5 — вернёт -1
5>=5
! 7 больше 3
7>=3 & ! вернёт -1
Аналогично "=>" и конструкциям:
no [выражение_1]<[выражение_2]
Сравнивать можно и текстовые значения, при этом символы сравниваются поочерёдно, и большим считается символ, стоящий ближе к концу алфавита.
"zz">="z" & ! верно
"z">="aaaaaa" & ! верно
"z">="z" & ! верно
! (не равно)
`!` — операция сравнения "НЕ РАВНО". Общая запись:
Если значение выражения `[выражение_1]` не равно значению выражения `[выражение_2]` операция вернёт -1, в противном случае вернёт 0. Иными словами: верно, если выражения не равны.
Аналогично "<>", или конструкции:
Не путать с оператором комментария.
Для лучшей читаемости кода лучше использовать `<>`.
Примеры:
2!4
! 5 равно 5 — вернёт 0
5!5
& (конкатенация)
`&` — конкатенация, операция объединения строковых выражений. Общая запись:
Не путайте с символом перечисления команд:
"26" & "27"
! в данном случае на экран будет выведена строка "2627"
("26" & "27")
Не рекомендуется использовать данную операцию для объединения строк, поскольку строки можно объединять через `+`:
"26"+"27"
Такая запись создаёт меньше путаницы и работает аналогичным образом.
AND
`AND` — логическое "И" (побитовое "И"). Общая запись:
Всё данное выражение будет верным, если верны выражения `[#выражение 1]` и `[#выражение 2]`.
Примеры:
(2=2) and (3!2) & ! выражение вернёт -1 (правда)
! одна часть выражения не верна, значит всё выражение неверно
(2!2) and (3!2) & ! выражение вернёт 0 (ложь)
! обе части выражения не верны, значит и всё выражение не верно
(2!2) and (3=2) & ! выражение вернёт 0 (ложь)
LOC
`LOC` — операция проверяет наличие локации и возвращает -1, если локация есть, и — 0, если локации нет. Общая запись:
, где `[$локация]` — название локации, наличие которой необходимо проверить в игре. Выражение верно, если локация существует в игре.
Примеры:
loc "начало" & ! если локация есть, возвращает -1
! если локация "улица" не добавлена в игру
if (loc "улица")=0:
act "Выйти на улицу": *pl "Я не могу выйти на улицу, дверь не отпирается."
end
MOD
`MOD` — операция вычисляет остаток от деления двух чисел. Общая запись:
, где `[#выражение 1]` — делимое, `[#выражение 2]` — делитель.
Примеры:
4 mod 2 & ! возвращает 0
! 5 не делится на 2 нацело
5 mod 2 & ! возвращает 1
! 13 делится на 10 нацело
13 mod 10 & ! возвращает 3
Остаток от деления отрицательного числа будет отрицательным числом.
NO
`NO` — операция отрицания. Общая запись:
Если `[#выражение]` верно, то всё выражение неверно, и наоборот.
Пример:
no 4=4 & ! вернёт 0 (ложь)
! можно читать как вопрос: четыре не равно четырём? Нет — ложь.
! то, что 5 равно 3, — неверно, значит всё выражение верно
no 5=3 & ! вернёт -1 (правда)
! можно читать как вопрос: пять не равно трём? Да — правда.
OBJ
`OBJ` — операция проверяет наличие предмета в инвентаре и возвращает -1, если предмет есть, и — 0, если предмета нет. Общая запись:
, где `[$название]` — название предмета, наличие которого необходимо проверить в окне предметов. Выражение верно, если предмет добавлен в окно предметов.
Примеры:
obj "Отвёртка" & ! если предмет есть, возвращает -1
! в зависимости от наличия того или иного предмета
! выводится то или иное действие
if (obj "Полный кувшин")=-1:
act "Опустошить кувшин":
delobj "Полный кувшин"
addobj "Пустой квушин"
goto $curloc
end
elseif (obj "Пустой кувшин")=-1:
act "Наполнить кувшин":
addobj "Полный кувшин"
delobj "Пустой квушин"
goto $curloc
end
end
OR
`OR` — логическое "ИЛИ" (побитовое "ИЛИ"). Общая запись:
Всё данное выражение будет верным, если хотя бы одно из выражений `[#выражение 1]` и `[#выражение 2]` верно.
Примеры:
(2=2) or (3!2) & ! выражение вернёт -1 (правда)
! одна часть выражения верна, значит всё выражение верно
(2!2) or (3!2) & ! выражение вернёт -1 (правда)
! обе части выражения не верны, значит и всё выражение не верно
(2!2) or (3=2) & ! выражение вернёт 0 (ложь)