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

Потерянная/затираемая переменная

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

Пример кода с ошибкой

Процедура ПростаяПерезапись()
    Объект = ВызовФункции();
    Объект = ВызовДругойФункции(); //переменная перезаписывается без условий
КонецПроцедуры

Велика вероятность, что код должен выглядеть так:

Процедура ПростаяПерезапись()
    Объект = ВызовФункции();
    ДругойОбъект = ВызовДругойФункции();
КонецПроцедуры

Или другой пример правильного кода (изменение происходит только при определённых условиях):

Процедура ПерезаписьВУсловии()
    ЛокальнаяПеременная = ВызовМоейФункции();
    Если Условие Тогда
        ЛокальнаяПеременная = 42;
    ИначеЕсли ДругоеУсловие Тогда
        ЛокальнаяПеременная = ВызовФункции();
    Иначе
        ЛокальнаяПеременная = 0;
    КонецЕсли;
КонецПроцедуры

См также - MITRE, CWE-563 - Assignment to Variable without Use - MITRE, CWE-1109 - Use of Same Variable for Multiple Purposes

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

// sonar:RewritingVariable:off
// sonar:RewritingVariable:on