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

Одинаковые выражения (вызов методов) в соседних условиях/ветках/блоках кода

Не рекомендуется дублировать вызовы функций с одинаковыми параметрами. Подобное дублирование приводит к повторному вычислению и часто отрицательно влияет на производительность.

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

ВАЖНО - обратите внимание на соседние строки кода (выше или ниже по коду). Очень часто замечания от этого правила находятся в продублированных блоках кода.

Рекомендуются следующие исправления: - выделить значение вызова функции в отдельную переменную - и использовать эту переменную во всех местах, где ранее были вызовы функции

Подобные исправления помогут: - скорее всего, ускорить выполнение за счет исключения повторных вычислений - упростить структуру кода

Подозрительный код - много дублирования для Метод(Выражение)

Если Условие(Метод(Выражение)) Тогда
    Результат = Метод(Выражение);
ИначеЕсли ДругоеУсловие(Метод(Выражение)) Тогда
    Результат = ДругойМетод(Метод(Выражение));
КонецЕсли;

Правильный код - выражение выделено в переменную

Значение = Метод(Выражение);
Если Условие(Значение) Тогда
    Результат = Значение;
ИначеЕсли ДругоеУсловие(Значение) Тогда
    Результат = ДругойМетод(Значение);
КонецЕсли;

См. также

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

// sonar:EqualMethodCallsInDifferentCodeBranches:off
// sonar:EqualMethodCallsInDifferentCodeBranches:on