10. Логічні вирази

Коли у методу одна-дві умови - вони об’єднуються через AND і все працює очевидно. Але якщо вам потрібно "або те, або інше", або "не ця умова", або складна комбінація з дужками - на допомогу приходять логічні вирази.

Коли потрібен логічний вираз

Логічний вираз потрібен якщо стандартної логіки "усі умови мають виконатися" недостатньо. Наприклад: "клієнт у групі VIP АБО сума замовлення > 10000".

Синтаксис

Логічний вираз пишеться у текстовому полі "Логічний вираз" під списком умов. Якщо поле порожнє - усі умови об’єднуються через AND (стандартна поведінка).

У виразі ви посилаєтесь на умови за їх індексом:

  • $0 - перша умова у списку
  • $1 - друга умова
  • $2 - третя і так далі

Оператори

ОператорАльтернативний синтаксисЗначення
AND&&Логічне І - обидва операнди мають бути true
OR||Логічне АБО - хоча б один true
NOT!Логічне НЕ - інвертує результат
( )-Дужки для пріоритету операцій
Регістр і пробіли

Оператори AND/OR/NOT можна писати в будь-якому регістрі: AND, and, And - усе працює. Пробіли між токенами ігноруються.

Пріоритет операторів

Як і в більшості мов програмування, оператори мають свій пріоритет (від найвищого до найнижчого):

  1. NOT - застосовується першим
  2. AND - друге
  3. OR - останнє

Тобто $0 OR $1 AND $2 читається як $0 OR ($1 AND $2). Якщо потрібен інший порядок - використовуйте дужки.

Приклади виразів

Приклад 1: проста OR

Завдання: метод оплати "Безготівковий розрахунок" доступний для юр. осіб або для замовлень > 50000 грн.

  • Умова $0: customer_group = [Юридичні особи]
  • Умова $1: total > 50000
  • Логічний вираз: $0 OR $1
Приклад 2: NOT (інверсія)

Завдання: націнка +30 грн для COD у всіх містах крім Києва.

  • Умова $0: city = "Київ"
  • Логічний вираз: NOT $0 або !$0
Приклад 3: комбінація з дужками

Завдання: метод "Експрес-доставка" доступний якщо: (У робочий день І до 16:00) АБО клієнт VIP.

  • $0: day in [Пн,Вт,Ср,Чт,Пт]
  • $1: time < 16
  • $2: customer_group = [VIP]
  • Логічний вираз: ($0 AND $1) OR $2
Приклад 4: складна комбінація

Завдання: підсумок "Безкоштовна упаковка" застосовується якщо сума >= 1000 І (товар з категорії "Подарунки" АБО "Преміум") І клієнт не у групі "Гуртові".

  • $0: total >= 1000
  • $1: category = [Подарунки]
  • $2: category = [Преміум]
  • $3: customer_group = [Гуртові]
  • Логічний вираз: $0 AND ($1 OR $2) AND NOT $3

Візуальний билдер виразів

Якщо вам незручно писати вирази вручну, FCR має візуальний билдер. Він автоматично будує вираз перетягуючи блоки умов і операторів мишею.

  1. Під полем "Логічний вираз" натисніть кнопку "Візуальний билдер"
  2. З’явиться панель з усіма умовами як перетягувані блоки
  3. Перетягуйте умови в порядку якому потрібно
  4. Між ними додавайте оператори AND/OR/NOT через кнопки
  5. Вираз внизу формується автоматично
  6. Перевірте результат і натисніть "Застосувати"
Візуальний билдер виразів
Drag-and-drop інтерфейс для побудови складних виразів

Режими: Visual / Manual

У білдері є перемикач 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. Сам вираз при цьому не переписується.

Модуль одразу перевіряє вираз після видалення умови: якщо він почав посилатися на неіснуючий номер, ви побачите повідомлення під полем. Але якщо вираз лишився формально коректним, його зміст міг змінитися - перечитайте вираз після видалення умов.