Перейти к содержанию

Одинаковые части условий в разных условиях блока "Если ИначеЕсли"

Совпадающие части условий во взаимоисключающих условиях часто говорят об ошибке. Также такие совпадения встречаются в сложных условиях. Нередко подобные проблемы возникают при дублировании кода.

Эти дублирующиеся условия могут приводить к проблемам производительности, т.к. возможно повторное вычисление значений, в т.ч. и сложных, тяжелых - обращение к БД, чтение файлов и т.п.

Рекомендация - проверьте код на валидность условий. Возможно, есть смысл исправить дублирование условий, переписав или упростив код.

Пример подозрительных условий

Если А = 2 И ОдноУсловие Тогда // дублирование А = 2 выглядит подозрительным
ИначеЕсли А = 2 И ДругоеУсловие Тогда // и здесь
КонецЕсли

такой блок кода лучше упростить

Если А = 2 Тогда
    Если ОдноУсловие Тогда
    ИначеЕсли ДругоеУсловие Тогда // и здесь
    КонецЕсли;
КонецЕсли

Или еще проблемное условие

Если А = 2 Или Б = 3 Тогда // дублирование А = 2 выглядит подозрительным
ИначеЕсли А = 2 И В = 1 Тогда // и здесь
КонецЕсли

Возможны более сложные условия, которые легко не упростить.

Например:

Если ПродублированноеУсловие И ОдноУсловие Тогда // использование "ПродублированноеУсловие" выглядит подозрительным
    еслиБлок();
ИначеЕсли ПродублированноеУсловие И Не ОдноУсловие Тогда
    иначеЕслиБлок();
Иначе
    иначеБлок();
КонецЕсли

Согласно Common Weakness Enumeration потенциальные ошибки, найденные с помощью этой диагностики, классифицируются как - CWE-570 - CWE-571

См. также

Экранирование кода

// sonar:EqualSubConditions:off
// sonar:EqualSubConditions:on