|
Ссылки и Объекты | ☑ | ||
---|---|---|---|---|
0
Pepeega
11.02.21
✎
10:12
|
Добрый день, подскажите пожалуйста, когда нельзя пользоваться ссылкой и когда нельзя пользоваться объектом или когда лучше пользоваться ссылкой, а когда объектом?
|
|||
1
acht
11.02.21
✎
10:17
|
Ссылкой нужно пользоваться когда необходимо, а объектом - только по мере надобности.
Задай вопрос еще раз, пожалуйста. |
|||
2
Василий Алибабаевич
11.02.21
✎
10:18
|
(0) Нужно редактировать свойства объекта - нужно пользоваться объектом. Нужно найти объект, или организовать связь между объектами - нужно пользоваться ссылкой. В общем ссылка это адрес, а объект - само здание.
|
|||
3
acht
11.02.21
✎
10:19
|
(0) Тебе нужны описания типовых ощибк в коде, что-ли?
|
|||
4
acht
11.02.21
✎
10:21
|
(2) > В общем ссылка это адрес, а объект - само здание.
Ну не совсем. Можно же организовать одновременно несколько экземпляров "здания" с одним "адресом" =) |
|||
5
Василий Алибабаевич
11.02.21
✎
10:27
|
(4) "Можно же организовать одновременно несколько экземпляров "здания" с одним "адресом" =)"
Это как? Несколько ссылок на один документ? Или элемент справочника? В общем хочу видеть пример. |
|||
6
Pepeega
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) Обе переменные ссылаются на один и тот же объект. Это точно так же как вы оставляете свой номер телефона миллиону абонентов. Но сам номер то остается один.
|
|||
10
Pepeega
11.02.21
✎
10:32
|
(7) Соглашусь с (8), это же просто 2 разные переменные, а ссылка у них одна
|
|||
11
singlych
11.02.21
✎
10:33
|
(5) (6) стрзаменить не работает? несколько экземпляров объекта с одной ссылкой
|
|||
12
ДенисЧ
11.02.21
✎
10:33
|
(8) Зануда
|
|||
13
Василий Алибабаевич
11.02.21
✎
10:36
|
(12) Ну нафига? В терминах чистого ООП (размещение в памяти, все дела...) ссылки таки две. В терминах БД - ссылка одна. Тек что тут как посмотреть.
|
|||
14
acht
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.Записать(); КонецЕсли; КонецЦикла |
|||
15
hhhh
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), "Ссылка одна.", "Ссылки разные."); Сообщить(ткст); |
|||
17
Pepeega
11.02.21
✎
10:45
|
(14) Хорошо, вопрос всё-таки отпал
|
|||
18
hhhh
11.02.21
✎
10:53
|
(16) в (4) об этом.
|
|||
19
acht
11.02.21
✎
10:55
|
(16) Мне таки лучше знать, про что я, извини.
Это вы там с ДенисЧ что-то мутите. |
|||
20
youalex
11.02.21
✎
10:55
|
(15) у этих объектов адрес - не ссылка. Точнее, ссылка, но не та)
Если развить аналогию, то ссылка - это адрес Объект БД - это здание Объект встроенного языка (Ссылка.ПолучитьОбъект()) - план здания по адресу (ссылке) |
|||
21
acht
11.02.21
✎
11:01
|
(20) > план здания по адресу
Тогда уж бригада таджиков, которая делает ремонт по этому адресу =) |
|||
22
Pepeega
11.02.21
✎
11:01
|
Такой вопрос возник, может тут подскажет кто "Есть "класс" ошибок с переинициализацией значений , почему лучше переменный переинициализировать внутри цикла?"
|
|||
23
Serg_1960
11.02.21
✎
11:04
|
(17) Всё очень просто: программисты и пользователи работает не с самими объектами, хранимыми в базе данных, а с их экземплярами (объектами, хранимые в памяти) - следовательно у одного объекта базы данных может быть много экземпляров в памяти. Так и происходит при многопользовательском режиме работы, когда несколько пользователей пытаются редактировать один и тот-же объект.
|
|||
24
Serg_1960
11.02.21
✎
11:05
|
(22) "Ничего не понял"(с) Повтори вопрос другими словами :)
|
|||
25
Rovan
гуру
11.02.21
✎
11:06
|
(15) а это на грани мошенничества... жулики так продают одновременно 1 квартиру 2м покупателям !
|
|||
26
acht
11.02.21
✎
11:06
|
(22) Не лучше. Зависит от.
Если ты, например, про создание массива со структурами, то "инициализация"- это создание нового экземпляра данных. Иначе у тебя все элемены в массиве будут указывать на единственный элемент, созданный за пределами цикла и заполненный данными последней итерации цикла. Это как раз то, про что Алибабаевич пытался начать - переменные не примитивного типа обрабатываются не по значению, а по ссылке на ее экземпляр. |
|||
27
Pepeega
11.02.21
✎
11:07
|
(24) Слышал, что есть грубо говоря Класс ошибок с переинициализацией значений, то есть если она есть вне цикла и с ней что-то происходит, почему лучше её еще раз объявить внутри цикла, пере взаимодействием с ней?
|
|||
28
Pepeega
11.02.21
✎
11:09
|
(26) хм, понял подход, спасибо
|
|||
29
Serg_1960
11.02.21
✎
11:31
|
(27) Что есть термин "инициализация" в Вашем понимании? Платформа, при объявлении переменных, инициализирует их значением «Неопределено» по умолчанию. Поэтому рекомендуется переменным явно присваивать значение конкретного типа перед использованием. Платформа также допускает использование "явной инициализации" - присвоением нужного значения новой переменной без предварительного объявления. Некоторые называют этот способ более "правильным". Выбор за Вами.
|
|||
30
Dmitrii
гуру
11.02.21
✎
11:36
|
(0) >> когда лучше пользоваться ссылкой, а когда объектом?
В общем случае. Для чтения данных - ссылка. Для изменения (модификации) - объект. Кроме того могут быть особенности обусловленные конкретным объектом. Например коллекция Движения доступна только у ДокументОбъект. А для ДокументСсылка придется получать наборы записей каждого регистра отдельно с установкой основного отбора по ссылке на регистратор. |
|||
31
Василий Алибабаевич
11.02.21
✎
11:40
|
(29) Для начала нужно определиться что есть "грубо говоря Класс ошибок с переинициализацией значений".
Но пусть себе останется абстракцией. Почему нужно переобъявлять внутри цикла? Видимо для того, чтобы надежно сбросить все свойства к значениям по умоляанию. Чтобы на следующей итерации не наступить на данне, оставшиеся с предыдущих. Можно в класс прописать метод типа Reset и там устанавливать все значения "по умолчанию". Почемуто это не сделано. Приходится тупо переобъявлять объект. |
|||
32
Serg_1960
11.02.21
✎
11:57
|
(31) Если мы говорим о переменных примитивного типа данных, то объявлять не обязательно - достаточно присвоить значение нужного типа... но мне кажется, что некоторые путают объявление в цикле с объявлением переменных внутри модуля/функции/процедуры - намекаю на видимость переменных.
|
|||
33
Василий Алибабаевич
11.02.21
✎
12:00
|
(32) У товарисча из (27) переменная не примитивного типа, а целый "Класс ошибок с переинициализацией значений".
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |