Size: a a a

Software Design/Architecture/Zen

2020 October 07

AD

Apache DOG™ in Software Design/Architecture/Zen
обьекты разные
источник

AD

Apache DOG™ in Software Design/Architecture/Zen
шагнул - поменялся, сидел на стуле тоже поменялся
источник

AD

Apache DOG™ in Software Design/Architecture/Zen
Разные обьекты, карл
источник

R

Roman in Software Design/Architecture/Zen
Алексей
потому что кто-то другой может хранить ту же самую ссылку на ту же самую точку, которая неожиданно изменится
Да, она изменится. Значит, "кто-то другой" должен оперировать уже актуальными данными. Зачем кому-то оперировать моим старым положением?
источник

T🐜

The Ant 🐜 in Software Design/Architecture/Zen
Roman
У тебя есть текущая координата p = Point(1, 2, 3) объекта в пространстве. Объект переместился — координата поменялась p.moveTo(2, 3, 4) (скорее даже obj.moveTo(...), который вызовет p.moveTo(...)). Что не так? Почему мы вдруг должны создавать новую, если она — характеристика объекта?
Объект поменяет свое состояние. Вот что случится. И поэтому ты должен его мутировать, согласно вашим принципам иммутабельности всего.
источник

А

Алексей in Software Design/Architecture/Zen
Roman
Да, она изменится. Значит, "кто-то другой" должен оперировать уже актуальными данными. Зачем кому-то оперировать моим старым положением?
затем что для точек как раз это не очень хорошо
источник

R

Roman in Software Design/Architecture/Zen
"Не очень хорошо" — это не очень хорошая характеристика ситуации) Что конкретно может быть хорошего в том, что "кто-то там другой", который зачем-то хранит ссылку не на меня, а на мою точку, будет оперировать старой точкой? Для чего она ему?
источник

SM

Sergey Milimko in Software Design/Architecture/Zen
Нет принципа иммьютабельности всего.
источник

А

Алексей in Software Design/Architecture/Zen
Roman
"Не очень хорошо" — это не очень хорошая характеристика ситуации) Что конкретно может быть хорошего в том, что "кто-то там другой", который зачем-то хранит ссылку не на меня, а на мою точку, будет оперировать старой точкой? Для чего она ему?
представь что у тебя есть число 4, ты передал его в какой-то метод который его где-то сохранил, а потом ты это число 4 поменял на число 5 и где-то в другом месте это число тоже изменилось на 5
источник

А

Алексей in Software Design/Architecture/Zen
вот точки в этом отношении похожи на числа
источник

А

Алексей in Software Design/Architecture/Zen
то есть от них ожидается что они должны вести себя как значения
источник

SM

Sergey Milimko in Software Design/Architecture/Zen
Roman
"Не очень хорошо" — это не очень хорошая характеристика ситуации) Что конкретно может быть хорошего в том, что "кто-то там другой", который зачем-то хранит ссылку не на меня, а на мою точку, будет оперировать старой точкой? Для чего она ему?
Да всё нормально. Можно так делать. Особенно в графике. Просто они херню какую-то несут.
источник

DE

Dmitry Eliseev in Software Design/Architecture/Zen
Roman
У тебя есть текущая координата p = Point(1, 2, 3) объекта в пространстве. Объект переместился — координата поменялась p.moveTo(2, 3, 4) (скорее даже obj.moveTo(...), который вызовет p.moveTo(...)). Что не так? Почему мы вдруг должны создавать новую, если она — характеристика объекта?
Вот :) Теперь и вы видите абсурдность религиозного хейта.

Если программист делает динамическую систему, где вызывая point.move(x, y) он намеренно хочет, чтобы все фигуры, хранящие эту точку, изменились, то у него проблем нет.

Но если программист в конструкторе new Vector(a, b) добавил проверку if (a.x == b.x) throw Exception на ненулевой вектор, а потом неожиданно после a.x = 5; b.x =5 обнаружил, что вектор оказался нулевым, то у него есть проблема.
источник

˸A

˸̧̨ ͅBlack Akula˸̧̨ ... in Software Design/Architecture/Zen
Я устал доказывать, что иммутабельность - это хорошо...
Надеюсь, всем кто против, попадётся проект с 150к+ LOC, где разные модули через обсёрверы мутируют объекты других модулей (в Мадженте именно так). Пусть потратят недельку на поиск того, какое место кода мутировало нужный объект. А потом после изменения этого участка - обязательно отвалится другое место, для которого эта мутация предназначалась изначально.
Я не шучу - такая ситуация встречалась часто
источник

А

Алексей in Software Design/Architecture/Zen
Sergey Milimko
Да всё нормально. Можно так делать. Особенно в графике. Просто они херню какую-то несут.
так в графике то как раз стараются так не делать
источник

AD

Apache DOG™ in Software Design/Architecture/Zen
Sergey Milimko
Да всё нормально. Можно так делать. Особенно в графике. Просто они херню какую-то несут.
и синканись всеми потоками видеокарты чтобы подгрузить новое значение
источник

А

Алексей in Software Design/Architecture/Zen
как раз стараются полигоны не менять, а все трансформации описывать матрицами
источник

AD

Apache DOG™ in Software Design/Architecture/Zen
знаешь какой там пенальти?
источник

R

Roman in Software Design/Architecture/Zen
Алексей
представь что у тебя есть число 4, ты передал его в какой-то метод который его где-то сохранил, а потом ты это число 4 поменял на число 5 и где-то в другом месте это число тоже изменилось на 5
И что? То, что кто-то там в другом месте хранил это число — это выглядит, как нарушение инкапсуляции и лечение — инкапсуляция, а не создание нового числа. Число само по себе ничего не говорит. А если это число, например, возраст человека, то "кому-то там" надо хранить ссылку на человека, а не число. И число с наступлением следующего дня рождения должно измениться, отчего "кто-то там другой" сможет прочитать в нужный ему момент времени новый возраст.

Можно довести до абсурда. "кто-то там" сохранил себе 20 лет назад возраст человека — 12 лет. Спустя 20 лет решил воспользоваться. Но человеку уже 32 года. Зачем это число 12 "кому-то там"?
источник

AD

Apache DOG™ in Software Design/Architecture/Zen
на синхронизацию дофига потоков?
источник