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

Повторное использование строкового литерала (DuplicateStringLiteral)

  • Тип: Дефект кода
  • Важность: Незначительный
  • Включена по умолчанию: Да
  • Теги: badpractice

Описание диагностики

Многократное использование одинаковых строковых литералов в одном модуле или методе является плохим тоном, т.к. - оно может приводить к сложностям при дальнейшем сопровождении, когда необходимо изменить значение и высока вероятность пропустить одно из повторений - оно может быть следствием "копипасты", т.е. разработчик забыл изменить, после копирования похожего блока кода.

Особенности реализации диагностики

  • Диагностика с настройками по умолчанию не учитывает регистр символов литерала, т.о. считаются одинаковыми строки АААА и АааА.
  • Нельзя указать минимальное значение анализируемого литерала меньше, чем значение по умолчанию. Это обусловлено тем, что часто используются служебные литералы, которые будут сильно фонить. Например: пустая строка "", числа-селекторы "1", "0" и т.д.
  • Нельзя уменьшить допустимое количество повторов использования меньше 1, т.к. это не имеет практического смысла.

Примеры

Плохой код

Процедура Тест(Параметр)
    Результат = "Значение";
    Если Параметр = "ВРег" Тогда
        Результат = Результат + ВРег("Значение");
    Иначе
        Результат = Результат + HРег("Значение");
    КонецЕсли;
КонецПроцедуры

Исправленный вариант

Процедура Тест(Параметр)
    Результат = "Значение";
    Если Параметр = "ВРег" Тогда
        Результат = Результат + ВРег(Результат);
    Иначе
        Результат = Результат + HРег(Результат);
    КонецЕсли;
КонецПроцедуры

Плохой код

Процедура Тест2(Параметр)
    Если Параметр = "ВРег" Тогда
        Результат = Результат + ВРег("Значение");
    Иначе
        Результат = Результат + HРег("Значение");
    КонецЕсли;
КонецПроцедуры

Процедура Тест3(Параметр)
    Если Параметр = "СОКРЛП" Тогда
        Результат = Результат + СокрЛП("Значение");
    КонецЕсли;
КонецПроцедуры

Исправленный вариант

Процедура Тест2(Параметр)
    Если Параметр = "ВРег" Тогда
        Результат = Результат + ВРег(СтроковоеЗначение());
    Иначе
        Результат = Результат + HРег(СтроковоеЗначение());
    КонецЕсли;
КонецПроцедуры

Процедура Тест3(Параметр)
    Если Параметр = "СОКРЛП" Тогда
        Результат = Результат + СокрЛП(СтроковоеЗначение());
    КонецЕсли;
КонецПроцедуры

Функция СтроковоеЗначение()
    Возврат "Значение";
КонецПроцедуры

Источники

Соответствие стандартам

Нет подтверждённых связей со стандартами.

Источник диагностики