|
|
| ||
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 | |||
ДенисЧ 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 | |||
singlych 11 - 11.02.21 - 10:33 | |||
ДенисЧ 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 | |||
acht 19 - 11.02.21 - 10:55 | |||
youalex 20 - 11.02.21 - 10:55 | (15) у этих объектов адрес - не ссылка. Точнее, ссылка, но не та)
Если развить аналогию, то ссылка - это адрес
Объект БД - это здание
Объект встроенного языка (Ссылка.ПолучитьОбъект()) - план здания по адресу (ссылке) | ||
acht 21 - 11.02.21 - 11:01 | |||
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 |
|
Список тем форума |