При написании логических выражений в 1С (например, в конструкции Если … Иначе … КонецЕсли) следует обращать внимание на порядок следования выражений булевых операций. В статье рассказывается почему.
При вычислении булевых операций 1С:Предприятие оптимизирует процесс и не рассчитывает значения тех выражений, которые не будут играть роли в результате расчета.
Рассмотрим несколько простых булевых операций:
- Выражение1 ИЛИ Выражение2
- Выражение1 И Выражение2
В первой операции если Выражение1 = ИСТИНА, то не имеет значения вычислять Выражение2, т.к. результат все равно всегда будет ИСТИНА.
Во второй операции если Выражение1 = ЛОЖЬ, то результат всегда будет ЛОЖЬ.
В обеих операциях Выражение2 вычислять бессмысленно: оно не влияет на результат выражения. В 1С думают так же, поэтому для получения результата не всегда рассчитываются все выражения.
Если принять во внимание, что в качестве выражения в операции может фигурировать «тяжелая» функция, то для оптимизации производительности следует обращать внимание на порядок следования выражений.
Рассмотрим на практическом примере описанную ситуацию:
Здесь Выражение1 — реквизит формы типа БУЛЕВО, доступный для редактирования пользователю; Выражение2() — функция, в теле которой установлена точка останова.
Если пользователь установит флаг Выражение1, то вызов функции Выражение2() выполнено не будет и на точке останова отладчик не остановится.
Если Выражение1 будет иметь значение ЛОЖЬ, то точка останова сработает, следовательно, функция Выражение2() будет вызвана.