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

Нельзя возвращать изменяемые значения из методов модулей с повторным использованием возвращаемых значений

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

Поэтому в качестве возвращаемых значений для методов общих модулей с повторным использованием рекомендуется использовать значения, состояние которых изменить нельзя, например: ФиксированныйМассив, ФиксированнаяСтруктура.

Это ограничение вызвано тем, что кэш возвращает каждый раз не копию объекта, а ссылку на один и тот же объект в памяти. Например, если в массив, который возвращает функция с повторным использованием, при каждом вызове при проведении документов дописывать новое значение, то в результате кэш очень быстро «распухнет». Кроме того, при очередном сбросе кэша, добавленные значения будут потеряны и код, который на них опирался, будет работать некорректно.

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

Функция МетодОбщегоМодуляПовтИсп(Знач Парам1) Экспорт
  Массив = Новый Массив;
  Массив.Добавить(Парам1);
  Возврат Массив;
КонецФункции

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

Функция МетодОбщегоМодуляПовтИсп(Знач Парам1) Экспорт
  Массив = Новый Массив;
  Массив.Добавить(Парам1);
  Возврат ФиксированныйМассив(Массив);
КонецФункции

См. также

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

// sonar:ReturnChangingValueInReuseModule:off
// sonar:ReturnChangingValueInReuseModule:on