bslls:DuplicateStringLiteral¶
Повторное использование строкового литерала (DuplicateStringLiteral)¶
- Тип: Дефект кода
- Важность: Незначительный
- Включена по умолчанию: Да
- Теги:
badpractice
Описание диагностики¶
Многократное использование одинаковых строковых литералов в одном модуле или методе является плохим тоном, т.к. - оно может приводить к сложностям при дальнейшем сопровождении, когда необходимо изменить значение и высока вероятность пропустить одно из повторений - оно может быть следствием "копипасты", т.е. разработчик забыл изменить, после копирования похожего блока кода.
Особенности реализации диагностики¶
- Диагностика с настройками по умолчанию не учитывает регистр символов литерала, т.о. считаются одинаковыми строки
ААААиАааА. - Нельзя указать минимальное значение анализируемого литерала меньше, чем значение по умолчанию. Это обусловлено тем, что часто используются служебные литералы, которые будут сильно фонить. Например: пустая строка "", числа-селекторы "1", "0" и т.д.
- Нельзя уменьшить допустимое количество повторов использования меньше 1, т.к. это не имеет практического смысла.
Примеры¶
Плохой код
Процедура Тест(Параметр)
Результат = "Значение";
Если Параметр = "ВРег" Тогда
Результат = Результат + ВРег("Значение");
Иначе
Результат = Результат + HРег("Значение");
КонецЕсли;
КонецПроцедуры
Исправленный вариант
Процедура Тест(Параметр)
Результат = "Значение";
Если Параметр = "ВРег" Тогда
Результат = Результат + ВРег(Результат);
Иначе
Результат = Результат + HРег(Результат);
КонецЕсли;
КонецПроцедуры
Плохой код
Процедура Тест2(Параметр)
Если Параметр = "ВРег" Тогда
Результат = Результат + ВРег("Значение");
Иначе
Результат = Результат + HРег("Значение");
КонецЕсли;
КонецПроцедуры
Процедура Тест3(Параметр)
Если Параметр = "СОКРЛП" Тогда
Результат = Результат + СокрЛП("Значение");
КонецЕсли;
КонецПроцедуры
Исправленный вариант
Процедура Тест2(Параметр)
Если Параметр = "ВРег" Тогда
Результат = Результат + ВРег(СтроковоеЗначение());
Иначе
Результат = Результат + HРег(СтроковоеЗначение());
КонецЕсли;
КонецПроцедуры
Процедура Тест3(Параметр)
Если Параметр = "СОКРЛП" Тогда
Результат = Результат + СокрЛП(СтроковоеЗначение());
КонецЕсли;
КонецПроцедуры
Функция СтроковоеЗначение()
Возврат "Значение";
КонецПроцедуры
Источники¶
Соответствие стандартам¶
Нет подтверждённых связей со стандартами.
Источник диагностики¶
- Исходная статья
- Ревизия:
f4616cda8a216789ee40529ed857e614b9e2ea25 - Лицензия:
LGPL-3.0-or-later