Здесь показаны различия между двумя версиями данной страницы.
Both sides previous revision Предыдущая версия Следущая версия | Предыдущая версия | ||
help:expressions [2025/09/28 10:13] aleks_versus [Логические операции] |
help:expressions [2025/09/28 13:37] (текущий) aleks_versus [Операции сравнения] |
||
---|---|---|---|
Строка 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** [$выр]'' - возвращает число одинаковых предметов с названием ''%%[$выр]%%'' в **Инвентаре**. <sxh qsp> |
addobj "Отвёртка" | addobj "Отвёртка" | ||
*pl obj "Отвёртка" & ! на экране будет число 1, так как предмет **Отвёртка** есть в окне предметов | *pl obj "Отвёртка" & ! на экране будет число 1, так как предмет **Отвёртка** есть в окне предметов |