Оптимизация расчета логических выражений

При написании логических выражений в 1С (например, в конструкции Если … Иначе … КонецЕсли) следует обращать внимание на порядок следования выражений булевых операций. В статье рассказывается почему.

При вычислении булевых операций 1С:Предприятие оптимизирует процесс и не рассчитывает значения тех выражений, которые не будут играть роли в результате расчета.

Рассмотрим несколько простых булевых операций:

  1. Выражение1 ИЛИ Выражение2
  2. Выражение1 И Выражение2

В первой операции если Выражение1 = ИСТИНА, то не имеет значения вычислять Выражение2, т.к. результат все равно всегда будет ИСТИНА.

Во второй операции если Выражение1 = ЛОЖЬ, то результат всегда будет ЛОЖЬ.

В обеих операциях Выражение2 вычислять бессмысленно: оно не влияет на результат выражения. В 1С думают так же, поэтому для получения результата не всегда рассчитываются все выражения.

Если принять во внимание, что в качестве выражения в операции может фигурировать «тяжелая» функция, то для оптимизации производительности следует обращать внимание на порядок следования выражений.

Рассмотрим на практическом примере описанную ситуацию:

Код для иллюстрации расчета выражений в логических операциях

Здесь Выражение1 — реквизит формы типа БУЛЕВО, доступный для редактирования пользователю; Выражение2() — функция, в теле которой установлена точка останова.

Если пользователь установит флаг Выражение1, то вызов функции Выражение2() выполнено не будет и на точке останова отладчик не остановится.

Если Выражение1 будет иметь значение ЛОЖЬ, то точка останова сработает, следовательно, функция Выражение2() будет вызвана.

Оцените статью