Теория по языку

1. user1974209 31.01.25 12:47 Сейчас в теме
Уважаемое сообщество, почему
Сообщить((новый Структура) = (новый Структура))

возвращает Ложь?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Sashares 33 31.01.25 12:51 Сейчас в теме
(1) Потому что это разные объекты.
Сравнивается не содержимое коллекций.
3. user1974209 31.01.25 12:52 Сейчас в теме
5. user2107191 31.01.25 12:53 Сейчас в теме
6. user1974209 31.01.25 12:54 Сейчас в теме
(5) Можно с ссылками на теорию, простите за назойливость
7. user2107191 31.01.25 12:55 Сейчас в теме
9. user1974209 31.01.25 13:00 Сейчас в теме
(7) Здорово, но хотелось бы что-то про объекты 1С прочитать из официальных источников. Есть термин объект метаданных, объект конфигурации...
13. user1974209 31.01.25 13:52 Сейчас в теме
4. user2107191 31.01.25 12:53 Сейчас в теме
Положи рядом две монетки, и подумай - они равны?
16. Sashares 33 31.01.25 14:56 Сейчас в теме
(4) Если монетки одинаковые, то по значению они равны, но является одна монетка другой? =)
user2107191; +1 Ответить
19. user1974209 31.01.25 14:59 Сейчас в теме
(16) Кассиру все равно, какие у тебя монетки, главное номинал (ну и целостность)
30. user2107191 31.01.25 15:31 Сейчас в теме
(19) Так то кассиру. А для нас это два разных экземпляра. И уже поэтому они не могут быть равны по своей сути.
Да и вообще...
1. Они могут быть разного года выпуска.
2. Они могут быть юбилейными.
3. Они могут быть произведены на разных монетных дворах.
4. Они могут быть из разного металла.
5. Они могут быть разной формы.

А ты говоришь, кассир...
32. spacecraft 31.01.25 16:45 Сейчас в теме
(19)
Кассиру все равно, какие у тебя монетки, главное номинал (ну и целостность)

Монеты 1руб 1963 и 2000 года одинаковые? Судя по вышесказанному утверждению они одинаковые )))
user2107191; +1 Ответить
31. user2107191 31.01.25 15:34 Сейчас в теме
8. GeraltSnow 176 31.01.25 12:56 Сейчас в теме
Потому что это два разных объекта, находящиеся в разных местах в памяти. 1С только примитивные типы сравнивает по значению.

Но если ты сделаешь вот так:

ПерваяСтруктура = Новый Структура;
ВтораяСтруктура = ПерваяСтруктура;

Тогда Сообщить(ПерваяСтруктура = ВтораяСтруктура) вернет Истина.
12. SlavaKron 31.01.25 13:41 Сейчас в теме
(8)
1С только примитивные типы сравнивает по значению.
Получается
Сообщить((новый ОписаниеТипов) = (новый ОписаниеТипов))
Сообщить((новый Цвет) = (новый Цвет))

Ложь, Ложь?
GeraltSnow; +1 Ответить
18. GeraltSnow 176 31.01.25 14:59 Сейчас в теме
(12) Действительно, стоит уточнить, что не только примитивные типы сравниваются по значению, но и остальные из группы иммутабельных
10. GeraltSnow 176 31.01.25 13:13 Сейчас в теме
Если требуется сравнить по значениям две структуры или другие коллекции, то используй функцию БСП ОбщегоНазначения.КоллекцииИдентичны()
14. user1974209 31.01.25 13:55 Сейчас в теме
Согласно (11)
Гипотеза: Структура является мутабельным типом, поэтому объекты данного типа нельзя сравнивать через оператор "="
15. Anton_new01 31.01.25 14:46 Сейчас в теме
(14) не так же.

согласно (11)
структура является мутабельным типом, поэтому:
Значения мутабельных типов сравниваются «по ссылке». Другими словами, сравниваются адреса памяти, где размещаются значения. Таким образом, два значения мутабельного типа, даже ссылающихся на один и тот же физический элемент данных (например, элемент справочника с одной и той же ссылкой), всегда не равны друг-другу. Значение мутабельного типа равно только само себе.
17. user1974209 31.01.25 14:58 Сейчас в теме
(15) Мутабельные значения не равны друг-другу => сравнение по "=" всегда ложно, значит некорректно, значит нельзя))
20. Anton_new01 31.01.25 15:11 Сейчас в теме
(17) нельзя это когда физически нельзя.
или будут санкции - 10 лет без права переписки.

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

Например сравнение с Null - тоже весьма любопытно.
22. user1974209 31.01.25 15:16 Сейчас в теме
(20)
Хорошо, это житейская терминология, оставим. Структура мутабельный тип?
23. Anton_new01 31.01.25 15:16 Сейчас в теме
21. Anton_new01 31.01.25 15:14 Сейчас в теме
(17) не всегда ложь при сравнении мутабельных типов.
если у них одинаковый адрес в памяти, то истина)))
24. user1974209 31.01.25 15:17 Сейчас в теме
(20)
(21) Было -бы здорово пример))
25. Anton_new01 31.01.25 15:18 Сейчас в теме
(24)
в (8) пример.
там сравнивают два мутабельных типа. и получают истина
26. user1974209 31.01.25 15:22 Сейчас в теме
(25) Там сравнивают две переменные с одним значением
27. Anton_new01 31.01.25 15:27 Сейчас в теме
(26)
в первом посте ты тоже сравнивал две переменные с одним значением. и результат был ложь.

ты просил пример где сравнение идет двух мутабельных типов и выдает истина - я привел.

в 8 сравнивается одна и таже структура, тока присвоенные разным переменным. - вот так будет корректно.
28. user1974209 31.01.25 15:29 Сейчас в теме
(27) Не согласен, в исходном посте две переменные (а есть ли они?, может два объекта?) с разными значениями одного типа.
29. Anton_new01 31.01.25 15:30 Сейчас в теме
(28)
вот что тут будет?

ПерваяСтруктура = Новый Структура;
ВтораяСтруктура = ПерваяСтруктура;
ВтораяСтруктура.Вставить("НоваяПриблуда", Истина);

Сообщить(ПерваяСтруктура = ВтораяСтруктура);
user2107191; +1 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот