Здесь показаны различия между двумя версиями данной страницы.
| Both sides previous revision Предыдущая версия Следущая версия | Предыдущая версия | ||
|
help:expressions [2024/12/13 09:58] aleks_versus [Операции сравнения] |
help:expressions [2025/10/03 12:11] (текущий) aleks_versus [Логические операции] |
||
|---|---|---|---|
| Строка 25: | Строка 25: | ||
| * **''AND''** | * **''AND''** | ||
| * **''NO''** | * **''NO''** | ||
| - | * **''=''**, **''<''**, **''>''**, **''!''**, **''<>''**, **''<=''**, **''>=''**, **''=<''**, **''=>''** (операции сравнения) | + | * **''=''**, **''<''**, **''>''**, **''!''**, **''<>''**, **''%%<=%%''**, **''>=''**, **''=<''**, **''%%=>%%''** (операции сравнения) |
| * **''OBJ''**, **''LOC''** | * **''OBJ''**, **''LOC''** | ||
| * **''&''** (конкатенация) | * **''&''** (конкатенация) | ||
| Строка 41: | Строка 41: | ||
| ===== Описание операций ===== | ===== Описание операций ===== | ||
| - | **Важно!** Поскольку в **QSP** нет булевого типа данных, истинность или ложность выражения определяется по его числовому значению. Верным считается числовое выражение, значение которого отлично от ''%%0%%''. При значении ''%%0%%'' выражение считается ложным. Для значения "верно" настоятельно рекомендуется использовать число ''%%1%%'', т.к. операции сравнения и логические операции возвращают именно это значение в случае истинности выражения. | + | ==== Правда или Ложь? ==== |
| + | Поскольку в **QSP** нет булевого типа данных, истинность или ложность выражения определяется по его числовому значению. Верным считается числовое выражение, значение которого отлично от ''**0**''. При значении ''**0**'' выражение считается ложным. Для значения "верно" настоятельно рекомендуется использовать число ''**1**'', т.к. операции сравнения и логические операции возвращают именно это значение в случае истинности выражения. | ||
| + | |||
| + | Начиная с версии 5.9.4 верными так же считаются: | ||
| + | |||
| + | * строковые значения, отличные от пустой строки (''**""**''). | ||
| + | * Примеры: <sxh qsp> | ||
| + | if '': *pl 'Пустая строка. Надпись не увидим.' | ||
| + | if 'непустая строка': *pl 'Условие выполняется. Надпись увидим.' | ||
| + | </sxh> | ||
| + | * непустые кортежи, в т.ч. содержащие пустые кортежи. | ||
| + | * Примеры: <sxh qsp> | ||
| + | if []: *pl 'Пустой кортеж. Надпись не увидим.' | ||
| + | if [[]]: *pl 'Не пустой кортеж. Надпись увидим.' | ||
| + | </sxh> | ||
| + | |||
| + | Благодаря этому вы можете использовать логические операции со значениями любого типа и не проводить явного сравнения со значениями по умолчанию. | ||
| + | |||
| + | Пример со строками: | ||
| + | |||
| + | * В QSP 5.9.3 и ниже: <sxh qsp> | ||
| + | loop while $name = '': | ||
| + | $name = $input('Введите имя:') | ||
| + | end | ||
| + | </sxh> | ||
| + | * В QSP 5.9.4 и выше: <sxh qsp> | ||
| + | loop while no $name: | ||
| + | $name = $input('Введите имя:') | ||
| + | end | ||
| + | </sxh> | ||
| ==== Математические операции ==== | ==== Математические операции ==== | ||
| Строка 67: | Строка 96: | ||
| ==== Операции сравнения ==== | ==== Операции сравнения ==== | ||
| + | |||
| + | Сравнивать можно данные любых типов. Подробнее о сравнении [[help:strings|строк]] и [[help:tuples|кортежей]] читайте в соответствующих разделах. | ||
| * **''[выр1] = [выр2]''** - операция **равно**. Верно, если значения рядом стоящих выражений равны. Данную операцию не стоит путать с операцией присваивания, хотя на первый взгляд они похожи. Чтобы операция **равно** корректно вернула значение, она должна быть записана после ключевого слова **''IF''**, **''ELSEIF''**, **''WHILE''** или в первом аргументе функции **''IIF''**, или стоять после явного оператора вывода текста вроде **''*PL''**, или если используется с неявным оператором, быть заключённой в скобки. Примеры: <sxh qsp> | * **''[выр1] = [выр2]''** - операция **равно**. Верно, если значения рядом стоящих выражений равны. Данную операцию не стоит путать с операцией присваивания, хотя на первый взгляд они похожи. Чтобы операция **равно** корректно вернула значение, она должна быть записана после ключевого слова **''IF''**, **''ELSEIF''**, **''WHILE''** или в первом аргументе функции **''IIF''**, или стоять после явного оператора вывода текста вроде **''*PL''**, или если используется с неявным оператором, быть заключённой в скобки. Примеры: <sxh qsp> | ||
| Строка 143: | Строка 174: | ||
| ==== Логические операции ==== | ==== Логические операции ==== | ||
| - | * ''**OBJ** [$выр]'' - операция проверки наличия предмета в **Инвентаре**. Верно, если в **Окне предметов** есть предмет с названием ''%%[$выр]%%''. <sxh qsp> | + | * ''**OBJ** [$название]'' - возвращает число предметов с названием ''%%[$выр]%%''. Подробнее в разделе [[help:objs|Предметы (инвентарь)]] |
| - | addobj "Отвёртка" | + | |
| - | *pl obj "Отвёртка" & ! на экране будет число 1, так как предмет **Отвёртка** есть в окне предметов | + | |
| - | *pl obj "Апельсин" &! на экране будет число 0, так как предмета **Апельсин** нет в окне предметов | + | |
| - | if obj "Отвёртка": | + | |
| - | *pl "У вас есть отвёртка." | + | |
| - | else | + | |
| - | *pl "У вас нет отвёртки." | + | |
| - | end | + | |
| - | </sxh> | + | |
| * ''**LOC** [$выр]'' - операция проверки наличия локации в игре. Верно, если в игре есть локация с названием ''%%[$выр]%%''. <sxh qsp> | * ''**LOC** [$выр]'' - операция проверки наличия локации в игре. Верно, если в игре есть локация с названием ''%%[$выр]%%''. <sxh qsp> | ||
| ! в игре создана локация "Густая чаща" | ! в игре создана локация "Густая чаща" | ||
| Строка 186: | Строка 208: | ||
| (2<>2) or (3=2) & ! выражение вернёт 0 (ложь) | (2<>2) or (3=2) & ! выражение вернёт 0 (ложь) | ||
| </sxh> Если ''[#выр1]'' верно, значение ''[#выр2]'' не вычисляется. | </sxh> Если ''[#выр1]'' верно, значение ''[#выр2]'' не вычисляется. | ||
| - | * ''[#выр1] **AND** [#выр2]'' - операция побитового "и". Всё выражение верно, только если обе его части верны: и ''%%[#выр1]%%'', и ''%%[#выр2]%%''. Примеры: <sxh qsp> | + | * ''[#выр1] **AND** [#выр2]'' - операция логического "и". Всё выражение верно, только если обе его части верны: и ''%%[#выр1]%%'', и ''%%[#выр2]%%''. Примеры: <sxh qsp> |
| *pl 1 and 1 & ! на экране увидим 1, так как обе части выражения равны 1 | *pl 1 and 1 & ! на экране увидим 1, так как обе части выражения равны 1 | ||
| *pl 1 and 0 & ! на экране увидим 0, так как только левая часть равна 1 | *pl 1 and 0 & ! на экране увидим 0, так как только левая часть равна 1 | ||