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

Строковые функции используются для вычисления константных выражений

Нет смысла выполнять строковые операции для строковых констант. Подобный код может приводить к повторным вычислениям и уменьшению производительности 1С. Вместо этого проще на этапе написания кода самостоятельно вычислить нужное константное значение и подставить его вместо вычисления.

Такая оптимизация позволит ускорить работу системы и устранит лишние затраты интерпретатора 1С.

Пример 1.

Подозрительный код

ЗаглавнаяСтрока = ВРег("Исходная строка");
Позиция = СтрНайти("Исходный текст", "текст");

Исправленный код

ЗаглавнаяСтрока = "ИСХОДНАЯ СТРОКА";
Позиция = 9; //СтрНайти("Исходный текст", "текст");

Пример 2. Часто разработчики используют подобный код:

Если СостояниеДокумента = "Черновик" Тогда
    ДействиеДляЧерновик();
ИначеЕсли СостояниеДокумента = "на утверждении" Тогда // опечатка
    ДействиеДляУтверждён1();    
КонецЕсли; 

Если СостояниеДокумента = "На утверждении" Тогда 
    ДействиеДляУтверждён2();
ИначеЕсли СостояниеДокумента = "Отклонён" Тогда 
    ДействиеДляОтклонён();  
КонецЕсли; 

В примере выше присутствует ошибка (тексты одинаковых состояний не равны). Чтобы избежать подобной ситуации, удобно было бы создать программное перечисление в виде фиксированной структуры:

СтатусыДокумента = Новый Структура;
СтатусыДокумента.Вставить("Черновик", "Черновик");
СтатусыДокумента.Вставить("НаУтверждении", "На утверждении");
СтатусыДокумента.Вставить("Отклонён", "Отклонён");
СтатусыДокумента = Новый ФиксированнаяСтруктура(СтатусыДокумента);

Если СостояниеДокумента = СтатусыДокумента.Черновик Тогда
    ДействиеДляЧерновик();
ИначеЕсли СостояниеДокумента = СтатусыДокумента.НаУтверждении Тогда
    ДействиеДляУтверждён1();    
КонецЕсли; 

Если СостояниеДокумента = СтатусыДокумента.НаУтверждении Тогда
    ДействиеДляУтверждён2();
ИначеЕсли СостояниеДокумента = СтатусыДокумента.Отклонён Тогда  
    ДействиеДляОтклонён();  
КонецЕсли; 

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

// sonar:StringMethodsWithConstantParameters:off
// sonar:StringMethodsWithConstantParameters:on