Вход | Регистрация
 

Ссылки и Объекты

Ссылки и Объекты
Я
   Pepeega
 
11.02.21 - 10:12
Добрый день, подскажите пожалуйста, когда нельзя пользоваться ссылкой и когда нельзя пользоваться объектом или когда лучше пользоваться ссылкой, а когда объектом?
   acht
 
1 - 11.02.21 - 10:17
Ссылкой нужно пользоваться когда необходимо, а объектом - только по мере надобности.

Задай вопрос еще раз, пожалуйста.
   Василий Алибабаевич
 
2 - 11.02.21 - 10:18
(0) Нужно редактировать свойства объекта - нужно пользоваться объектом. Нужно найти объект, или организовать связь между объектами - нужно пользоваться ссылкой. В общем ссылка это адрес, а объект - само здание.
   acht
 
3 - 11.02.21 - 10:19
(0) Тебе нужны описания типовых ощибк в коде, что-ли?
   acht
 
4 - 11.02.21 - 10:21
(2) > В общем ссылка это адрес, а объект - само здание.
Ну не совсем. Можно же организовать одновременно несколько экземпляров "здания" с одним "адресом" =)
   Василий Алибабаевич
 
5 - 11.02.21 - 10:27
(4) "Можно же организовать одновременно несколько экземпляров "здания" с одним "адресом" =)"
Это как?
Несколько ссылок на один документ? Или элемент справочника? В общем хочу видеть пример.
   Pepeega
 
6 - 11.02.21 - 10:28
(4) (2) Спасибо, плюс/минус я понял, что к чему, а вот насчет "Можно же организовать одновременно несколько экземпляров "здания" с одним "адресом" =)", не совсем понятно, можно как-то иметь несколько ссылок на один документ?
   ДенисЧ
 
7 - 11.02.21 - 10:29
(6)
а1 = Документы.Реализация.НайтиПоНомеру("12345", Дата(2021, 1,1));
а2 = Документы.Реализация.НайтиПоНомеру("12345", Дата(2021, 1,1));

Вот тебе и две ссылки...
   Василий Алибабаевич
 
8 - 11.02.21 - 10:30
(7) Нифига. Ссылка одна. Переменных, которые содержат эту ссылку - две.
   Василий Алибабаевич
 
9 - 11.02.21 - 10:32
+ (8) Обе переменные ссылаются на один и тот же объект. Это точно так же как вы оставляете свой номер телефона миллиону абонентов. Но сам номер то остается один.
   Pepeega
 
10 - 11.02.21 - 10:32
(7) Соглашусь с (8), это же просто 2 разные переменные, а ссылка у них одна
   singlych
 
11 - 11.02.21 - 10:33
(5) (6) стрзаменить не работает? несколько экземпляров объекта с одной ссылкой
   ДенисЧ
 
12 - 11.02.21 - 10:33
(8) Зануда
   Василий Алибабаевич
 
13 - 11.02.21 - 10:36
(12) Ну нафига? В терминах чистого ООП (размещение в памяти, все дела...) ссылки таки две. В терминах БД - ссылка одна. Тек что тут как посмотреть.
   acht
 
14 - 11.02.21 - 10:36
(6) а1 = Документы.Реализация.НайтиПоНомеру("12345", Дата(2021, 1,1));

о1 = а1.ПолучитьОбъект();
о2 = а1.ПолучитьОбъект();

o1.Номер = 23456;
o2.Номер = 98765;

Генератор = Новый ГенераторСлучайныхЧисел()
Для и = 1 По 1000 Цикл
    Если Генератор.СлучайноеЧисло(1,1000) > 500 Тогда
        о1.Записать();
    Иначе
        о2.Записать();
    КонецЕсли;
КонецЦикла
   hhhh
 
15 - 11.02.21 - 10:38
(8) он имел в виду другое.

Объект1 = Ссылка.ПолучитьОбъект();
Объект2 = Ссылка.ПолучитьОбъект();

два разных объекта.
   Василий Алибабаевич
 
16 - 11.02.21 - 10:42
(14) Нет. Речь об этом :
а1 = Документы.Реализация.НайтиПоНомеру("12345", Дата(2021, 1,1));
а2 = Документы.Реализация.НайтиПоНомеру("12345", Дата(2021, 1,1));

ткст = ?(а1 = а2, "Ссылка одна.", "Ссылки разные.");
Сообщить(ткст);

ткст = ?(Строка(а1) = Строка(а2), "Ссылка одна.", "Ссылки разные.");
Сообщить(ткст);
   Pepeega
 
17 - 11.02.21 - 10:45
(14) Хорошо, вопрос всё-таки отпал
   hhhh
 
18 - 11.02.21 - 10:53
(16) в (4) об этом.
   acht
 
19 - 11.02.21 - 10:55
(16) Мне таки лучше знать, про что я, извини.
Это вы там с ДенисЧ что-то мутите.
   youalex
 
20 - 11.02.21 - 10:55
(15) у этих объектов адрес - не ссылка. Точнее, ссылка, но не та)
Если развить аналогию, то ссылка - это адрес
Объект БД - это здание
Объект встроенного языка (Ссылка.ПолучитьОбъект()) - план здания по адресу (ссылке)
   acht
 
21 - 11.02.21 - 11:01
(20) > план здания по адресу

Тогда уж бригада таджиков, которая делает ремонт по этому адресу =)
   Pepeega
 
22 - 11.02.21 - 11:01
Такой вопрос возник, может тут подскажет кто "Есть "класс" ошибок с переинициализацией значений , почему лучше переменный переинициализировать внутри цикла?"
   Serg_1960
 
23 - 11.02.21 - 11:04
(17) Всё очень просто: программисты и пользователи работает не с самими объектами, хранимыми в базе данных, а с их экземплярами (объектами, хранимые в памяти) - следовательно у одного объекта базы данных может быть много экземпляров в памяти. Так и происходит при многопользовательском режиме работы, когда несколько пользователей пытаются редактировать один и тот-же объект.
   Serg_1960
 
24 - 11.02.21 - 11:05
(22) "Ничего не понял"(с) Повтори вопрос другими словами :)
   Rovan
 
25 - 11.02.21 - 11:06
(15) а это на грани мошенничества...  жулики так продают одновременно 1 квартиру 2м покупателям !
   acht
 
26 - 11.02.21 - 11:06
(22) Не лучше. Зависит от.

Если ты, например, про создание массива со структурами, то "инициализация"- это создание нового экземпляра данных. Иначе у тебя все элемены в массиве будут указывать на единственный элемент, созданный за пределами цикла и заполненный данными последней итерации цикла.

Это как раз то, про что Алибабаевич пытался начать - переменные не примитивного типа обрабатываются не по значению, а по ссылке на ее экземпляр.
   Pepeega
 
27 - 11.02.21 - 11:07
(24) Слышал, что есть грубо говоря Класс ошибок с переинициализацией значений, то есть если она есть вне цикла и с ней что-то происходит, почему лучше её еще раз объявить внутри цикла, пере взаимодействием с ней?
   Pepeega
 
28 - 11.02.21 - 11:09
(26) хм, понял подход, спасибо
   Serg_1960
 
29 - 11.02.21 - 11:31
(27) Что есть термин "инициализация" в Вашем понимании? Платформа, при объявлении переменных, инициализирует их значением «Неопределено» по умолчанию. Поэтому рекомендуется переменным явно присваивать значение конкретного типа перед использованием. Платформа также допускает использование "явной инициализации" - присвоением нужного значения новой переменной без предварительного объявления. Некоторые называют этот способ более "правильным". Выбор за Вами.
   Dmitrii
 
30 - 11.02.21 - 11:36
(0) >> когда лучше пользоваться ссылкой, а когда объектом?

В общем случае.
Для чтения данных - ссылка.
Для изменения (модификации) - объект.

Кроме того могут быть особенности обусловленные конкретным объектом. Например коллекция Движения доступна только у ДокументОбъект. А для ДокументСсылка придется получать наборы записей каждого регистра отдельно с установкой основного отбора по ссылке на регистратор.
 
 Рекламное место пустует
   Василий Алибабаевич
 
31 - 11.02.21 - 11:40
(29) Для начала нужно определиться что есть "грубо говоря Класс ошибок с переинициализацией значений".
Но пусть себе останется абстракцией.
Почему нужно переобъявлять внутри цикла? Видимо для того, чтобы надежно сбросить все свойства к значениям по умоляанию. Чтобы на следующей итерации не наступить на данне, оставшиеся с предыдущих. Можно в класс прописать метод типа Reset и там устанавливать все значения "по умолчанию". Почемуто это не сделано. Приходится тупо переобъявлять объект.
   Serg_1960
 
32 - 11.02.21 - 11:57
(31) Если мы говорим о переменных примитивного типа данных, то объявлять не обязательно - достаточно присвоить значение нужного типа... но мне кажется, что некоторые путают объявление в цикле с объявлением переменных внутри модуля/функции/процедуры - намекаю на видимость переменных.
   Василий Алибабаевич
 
33 - 11.02.21 - 12:00
(32) У товарисча из (27) переменная не примитивного типа, а целый "Класс ошибок с переинициализацией значений".


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.