Одинаковые выражения (вызов методов) в соседних условиях/ветках/блоках кода
Не рекомендуется дублировать вызовы функций с одинаковыми параметрами. Подобное дублирование приводит к повторному вычислению и часто отрицательно влияет на производительность.
Правило находит дубли вызовов как в блоках кода, так и в условиях Если/ИначеЕсли
. Смотрите пример подозрительного кода ниже.
ВАЖНО - обратите внимание на соседние строки кода (выше или ниже по коду). Очень часто замечания от этого правила находятся в продублированных блоках кода.
Рекомендуются следующие исправления: - выделить значение вызова функции в отдельную переменную - и использовать эту переменную во всех местах, где ранее были вызовы функции
Подобные исправления помогут: - скорее всего, ускорить выполнение за счет исключения повторных вычислений - упростить структуру кода
Подозрительный код - много дублирования для Метод(Выражение)
Если Условие(Метод(Выражение)) Тогда
Результат = Метод(Выражение);
ИначеЕсли ДругоеУсловие(Метод(Выражение)) Тогда
Результат = ДругойМетод(Метод(Выражение));
КонецЕсли;
Правильный код - выражение выделено в переменную
Значение = Метод(Выражение);
Если Условие(Значение) Тогда
Результат = Значение;
ИначеЕсли ДругоеУсловие(Значение) Тогда
Результат = ДругойМетод(Значение);
КонецЕсли;
См. также
- Правило Совпадающие/одинаковые тела методов
- Правило Дублирование одинаковых/похожих блоков кода
- Правило Одинаковые условия в последовательности вида "Если (....) ИначеЕсли (....) ИначеЕсли (....)".
Экранирование кода
// sonar:EqualMethodCallsInDifferentCodeBranches:off
// sonar:EqualMethodCallsInDifferentCodeBranches:on