10. Логічні вирази
Коли у методу одна-дві умови - вони об’єднуються через AND і все працює очевидно. Але якщо вам потрібно "або те, або інше", або "не ця умова", або складна комбінація з дужками - на допомогу приходять логічні вирази.
Логічний вираз потрібен якщо стандартної логіки "усі умови мають виконатися" недостатньо. Наприклад: "клієнт у групі VIP АБО сума замовлення > 10000".
Синтаксис
Логічний вираз пишеться у текстовому полі "Логічний вираз" під списком умов. Якщо поле порожнє - усі умови об’єднуються через AND (стандартна поведінка).
У виразі ви посилаєтесь на умови за їх індексом:
$0- перша умова у списку$1- друга умова$2- третя і так далі
Оператори
| Оператор | Альтернативний синтаксис | Значення |
|---|---|---|
AND | && | Логічне І - обидва операнди мають бути true |
OR | || | Логічне АБО - хоча б один true |
NOT | ! | Логічне НЕ - інвертує результат |
( ) | - | Дужки для пріоритету операцій |
Оператори AND/OR/NOT можна писати в будь-якому регістрі: AND, and, And - усе працює. Пробіли між токенами ігноруються.
Пріоритет операторів
Як і в більшості мов програмування, оператори мають свій пріоритет (від найвищого до найнижчого):
NOT- застосовується першимAND- другеOR- останнє
Тобто $0 OR $1 AND $2 читається як $0 OR ($1 AND $2). Якщо потрібен інший порядок - використовуйте дужки.
Приклади виразів
Завдання: метод оплати "Безготівковий розрахунок" доступний для юр. осіб або для замовлень > 50000 грн.
- Умова
$0:customer_group = [Юридичні особи] - Умова
$1:total > 50000 - Логічний вираз:
$0 OR $1
Завдання: націнка +30 грн для COD у всіх містах крім Києва.
- Умова
$0:city = "Київ" - Логічний вираз:
NOT $0або!$0
Завдання: метод "Експрес-доставка" доступний якщо: (У робочий день І до 16:00) АБО клієнт VIP.
$0:day in [Пн,Вт,Ср,Чт,Пт]$1:time < 16$2:customer_group = [VIP]- Логічний вираз:
($0 AND $1) OR $2
Завдання: підсумок "Безкоштовна упаковка" застосовується якщо сума >= 1000 І (товар з категорії "Подарунки" АБО "Преміум") І клієнт не у групі "Гуртові".
$0:total >= 1000$1:category = [Подарунки]$2:category = [Преміум]$3:customer_group = [Гуртові]- Логічний вираз:
$0 AND ($1 OR $2) AND NOT $3
Візуальний билдер виразів
Якщо вам незручно писати вирази вручну, FCR має візуальний билдер. Він автоматично будує вираз перетягуючи блоки умов і операторів мишею.
- Під полем "Логічний вираз" натисніть кнопку "Візуальний билдер"
- З’явиться панель з усіма умовами як перетягувані блоки
- Перетягуйте умови в порядку якому потрібно
- Між ними додавайте оператори AND/OR/NOT через кнопки
- Вираз внизу формується автоматично
- Перевірте результат і натисніть "Застосувати"
Режими: Visual / Manual
У білдері є перемикач Visual / Manual:
- Visual - редагування через перетягування і кнопки. Вираз будується автоматично
- Manual - пряме редагування текстового поля. Корисно для досвідчених користувачів і для виразів які важко зібрати візуально
Можна вільно перемикатись між режимами.
Перевірка виразу під час введення
Вираз перевіряється прямо під час набору, з невеликою затримкою. Якщо в ньому є помилка, під полем зʼявляється червона підказка з описом і позицією символу, а саме поле підсвічується червоним.
$0 AND NOT $1 AND- "Непередбачений кінець виразу"$0 AND $5при двох умовах - "Невідома умова «$5» у позиції 8"$0 AND $1 Ж- "Непередбачений символ «Ж» у позиції 11"($0 OR $1- "Незакрита дужка у позиції 1"
Поки вираз містить помилку, зберегти метод не вдасться: модуль зупинить збереження і поставить курсор у поле виразу. Так налаштування з непрацездатним виразом не потрапить на чекаут.
Якщо поле порожнє, всі умови обʼєднуються оператором AND. Перевірка на порожній вираз не спрацьовує, це штатний режим роботи.
Типові помилки
Незакриті дужки
Вираз ($0 AND $1 (без закриваючої дужки) парситься але працює непередбачувано. Завжди закривайте дужки.
Посилання на неіснуючу умову
Якщо у вас 3 умови ($0, $1, $2), а у виразі написано $3 - він буде вважатись false.
Невідомі оператори
FCR розуміє тільки AND, OR, NOT (та їх символьні аналоги). XOR, NAND тощо не підтримуються.
Якщо у вас є вираз $0 AND $1 OR $2 і ви видаляєте умову $1, то решта умов переіндексуються: те, що було $2, стане $1. Сам вираз при цьому не переписується.
Модуль одразу перевіряє вираз після видалення умови: якщо він почав посилатися на неіснуючий номер, ви побачите повідомлення під полем. Але якщо вираз лишився формально коректним, його зміст міг змінитися - перечитайте вираз після видалення умов.