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

Конкатенация строк может быть заменена на СтрСоединить или СтрШаблон

При массовых операциях, в т.ч. внутри циклов, для конкатенации (сложения) строк следует использовать методы платформы СтрРазделить, СтрСоединить и СтрШаблон.

Особого внимания требует конкатенация в циклах и в универсальных механизмах, которые могут применяться на сколь угодно больших объемах данных.

Часто удобно применять функцию СтрШаблон вместо конкатенации, т.к. улучшается читабельность и понятность кода.

Например, вместо

Процедура ВыводОшибки(НомерСтроки, ТипДанных)
    Результат = "Ошибка в данных в строке " + НомерСтроки + " (требуется тип " + ТипДанных + ")";
КонецПроцедуры

лучше использовать СтрШаблон:

Процедура ВыводОшибки(НомерСтроки, ТипДанных)
    Результат = СтрШаблон("Ошибка в данных в строке %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