Конкатенация строк может быть заменена на СтрСоединить или СтрШаблон
При массовых операциях, в т.ч. внутри циклов, для конкатенации (сложения) строк следует использовать методы платформы СтрРазделить
, СтрСоединить
и СтрШаблон
.
Особого внимания требует конкатенация в циклах и в универсальных механизмах, которые могут применяться на сколь угодно больших объемах данных.
Часто удобно применять функцию СтрШаблон
вместо конкатенации, т.к. улучшается читабельность и понятность кода.
Например, вместо
Процедура ВыводОшибки(НомерСтроки, ТипДанных)
Результат = "Ошибка в данных в строке " + НомерСтроки + " (требуется тип " + ТипДанных + ")";
КонецПроцедуры
лучше использовать СтрШаблон
:
Процедура ВыводОшибки(НомерСтроки, ТипДанных)
Результат = СтрШаблон("Ошибка в данных в строке %1 (требуется тип %2)", НомерСтроки, ТипДанных);
КонецПроцедуры
При массовых конкатенациях строк могут возникать проблемы и с быстродействием, и с потреблением оперативной памяти.
Стандарт 1С рекомендует ориентироваться на 1000 операций конкатенации строк и более.
Эта величина также может быть еще меньше при увеличении длин строк: - чем строки длиннее, тем операции выполняются дольше.
В то же время, не следует отказываться от конкатенации строк в остальных случаях, так как это заметно снижает читаемость кода.
Например, неправильно:
Для НомерКолонки = 1 По Макет.ШиринаТаблицы Цикл
СводныйТекст = СводныйТекст + Символы.ПС + "Область - " + ТекстОбласти;
Правильно:
Строки = Новый Массив;
Для НомерКолонки = 1 По Макет.ШиринаТаблицы Цикл
Строки.Добавить(ТекстОбласти);
КонецЦикла;
СводныйТекст = СтрСоединить(Строки, Символы.ПС + "Область - ");
Подобная обработка данных не только быстрее выполняется, но и приводит к снижению потребления оперативной памяти.
См. также
- Массовая конкатенация строк - стандарт 1С:ИТС
- Оформление текстов запросов (раздел "Конкатенация нескольких текстов запросов в пакет")
- Template strings should be used instead of concatenation
- Strings should not be concatenated using '+' in a loop
- Database queries should not be vulnerable to injection attacks
Экранирование кода
// sonar:StringConcat:off
// sonar:StringConcat:on