Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
24 фев 2024, 16:53

Чем отличается скопирование списка значений от обычного присваивания СЗ?

Автор gulnyr, 11 мая 2023, 15:05

0 Пользователей и 1 гость просматривают эту тему.

gulnyr

Список значений:
СписокЗначений = Новый СписокЗначений();
СписокЗначений.Добавить("Один","Первый");
СписокЗначений.Добавить("Два","Второй");

Есть первый вариант:
СписокЗначенийКопия = СписокЗначений.Скопировать();
Сообщить(СписокЗначенийКопия[0].Представление); //Первый

Есть второй вариант:
СписокЗначенийКопия = СписокЗначений;
Сообщить(СписокЗначенийКопия[0].Представление); //Первый

Чем они отличаются, и почему нельзя просто присваивать, а придумали метод копирования?

LexaK

gulnyr, не заморачивайтесь!
это копирование для тех кому оно надо!
в большинстве случаев оно не нужно, так и не надо его использовать!

в самой платформе 1С еще много чего такого, с чем вы ни когда не столкнетесь, в обычных разработках!
так что же теперь ломать голову по всем этим наворотам?
если помогло нажмите: Спасибо!

antoneus

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

А = Новый СписокЗначений;
А.Добавить(1);
Сообщить(а[0]);//1

Б = А;
Б[0] = 2;
Сообщить(а[0]);//2. Изменили как бы Б, но изменился и А, т.к. это один и тот же список

и

А = Новый СписокЗначений;
А.Добавить(1);
Сообщить(а[0]);//1

Б = А.Скопировать();
Сообщить(Б[0]);//1, как и в А
Б[0] = 2;
Сообщить(а[0]);//1. Изменили Б, А не изменился - это разные списки

Так же и с передачей параметров в процедуру или функцию - иногда перед параметром в объявлении функции стоит Знач. По умолчанию значения в процедуры и функции в 1С передаются по ссылке - то есть, если передать в процедуру таблицу значений и в этой процедуре ее изменить - после завершения процедуры эта таблица окажется измененной в том месте, откуда процедуру вызывали. А если передать по значению, т.е. написать

Процедура ТутЧтоТоДелается(Знач ТаблицаЗначений)
то в процедуру передастся копия таблицы, из нее можно будет что-то прочитать, как-то ее изменить, но в том месте, откуда процедура вызывалась, с таблицей ничего не произойдет.

LexaK

antoneus, поправка! на ссылочные параметры это не действует!  :befhbt:
ЦитироватьПроцедура ТутЧтоТоДелается(Знач ТаблицаЗначений)

то в процедуру передастся копия таблицы, из нее можно будет что-то прочитать, как-то ее изменить, но в том месте, откуда процедура вызывалась, с таблицей ничего не произойдет.
если помогло нажмите: Спасибо!

antoneus


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск