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

Одинаковые условия в последовательности вида "Если (....) ИначеЕсли (....) ИначеЕсли (....)".

Дублируются условия в разных ветках оператора Если.

Часто это является последствиями неверного или незаконченного "копипаста", т.е. при дублировании кода.

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

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

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

Если Перем1 = Перем2 Тогда
    А = 1;
ИначеЕсли Перем2 = Перем1 Тогда
    Б = 1;
КонецЕсли;
Если УсловиеВыполнено() Тогда
    А = 1;
ИначеЕсли Функция2(Значение1, Значение2) Тогда // ошибка
    Б = 1;
ИначеЕсли Функция2(Значение1, Значение2) Тогда // ошибка
    В = 1;
КонецЕсли;

или более сложный вариант дублирования

Если ПервоеУсловиеВыполнено() Тогда
    А = 1;
ИначеЕсли Перем1 = Перем2 Тогда // ошибка
    Б = 1;
ИначеЕсли ТретьеУсловиеВыполнено() Тогда
    В = 1;
ИначеЕсли Перем1 = Перем2 Тогда // ошибка
    Г = 1;
КонецЕсли;

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

См. также

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

// sonar:EqualConditions:off
// sonar:EqualConditions:on