Size: a a a

Software Design/Architecture/Zen

2020 October 07

А

Алексей in Software Design/Architecture/Zen
поэтому и формальных доказательств тут особо и не сделаешь
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
тогда и спорить об этом бессмысленно)
источник

DE

Dmitry Eliseev in Software Design/Architecture/Zen
Sergey Milimko
Так для чего иммьютабельность нужна?
Для избавления от ситуаций, когда мы передали две точки в вектор:

vector = new Vector(a, b)

с подсчётом длины:

print vector.length() // 12

Если кто-то после этого вдруг смутирует первую точку:

a.x = 5

то потом неожиданно обнаружится, что это изменило тот вектор:

print vector.length() // 27

Поэтому для таких гарантий нужно клонировать объект вручную и мутировать уже его:

c = clone a
c.x = 5

Или сделать его иммутабельным автоклонируемым внутри по умолчанию:

c = a.withX(5)

В этом и смысл при работе со значениями вроде точек их делать иммутабельными клонируемыми.
источник

А

Алексей in Software Design/Architecture/Zen
Dmitriy Tkachenko
тогда и спорить об этом бессмысленно)
да нет
источник

SM

Sergey Milimko in Software Design/Architecture/Zen
Dmitriy Tkachenko
Для гарантий
Гарантий чего?
источник

А

Алексей in Software Design/Architecture/Zen
Dmitriy Tkachenko
или просто можно учесть, что объекты во всех реализациях компиляторов и интерпретаторов передаются по ссылке
не во всех кстати
источник

А

Алексей in Software Design/Architecture/Zen
в C++ можно по значению передавать
источник

R

Roman in Software Design/Architecture/Zen
Dmitry Eliseev
Для избавления от ситуаций, когда мы передали две точки в вектор:

vector = new Vector(a, b)

с подсчётом длины:

print vector.length() // 12

Если кто-то после этого вдруг смутирует первую точку:

a.x = 5

то потом неожиданно обнаружится, что это изменило тот вектор:

print vector.length() // 27

Поэтому для таких гарантий нужно клонировать объект вручную и мутировать уже его:

c = clone a
c.x = 5

Или сделать его иммутабельным автоклонируемым внутри по умолчанию:

c = a.withX(5)

В этом и смысл при работе со значениями вроде точек их делать иммутабельными клонируемыми.
Что значит "неожиданно обнаружится, что это изменило вектор"? Переводя это в плоскость юзеров и емейлов, ты предлагаешь менять в каком-то месте емейл юзеру так, чтобы все остальные места получили старый и уже неактуальный емейл?
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
Переслано от Dmitriy Tkachenko
источник

SM

Sergey Milimko in Software Design/Architecture/Zen
Dmitry Eliseev
Для избавления от ситуаций, когда мы передали две точки в вектор:

vector = new Vector(a, b)

с подсчётом длины:

print vector.length() // 12

Если кто-то после этого вдруг смутирует первую точку:

a.x = 5

то потом неожиданно обнаружится, что это изменило тот вектор:

print vector.length() // 27

Поэтому для таких гарантий нужно клонировать объект вручную и мутировать уже его:

c = clone a
c.x = 5

Или сделать его иммутабельным автоклонируемым внутри по умолчанию:

c = a.withX(5)

В этом и смысл при работе со значениями вроде точек их делать иммутабельными клонируемыми.
Шаблон объекта значения описал. Но для чего его применять то?
источник

T🐜

The Ant 🐜 in Software Design/Architecture/Zen
Dmitry Eliseev
Для избавления от ситуаций, когда мы передали две точки в вектор:

vector = new Vector(a, b)

с подсчётом длины:

print vector.length() // 12

Если кто-то после этого вдруг смутирует первую точку:

a.x = 5

то потом неожиданно обнаружится, что это изменило тот вектор:

print vector.length() // 27

Поэтому для таких гарантий нужно клонировать объект вручную и мутировать уже его:

c = clone a
c.x = 5

Или сделать его иммутабельным автоклонируемым внутри по умолчанию:

c = a.withX(5)

В этом и смысл при работе со значениями вроде точек их делать иммутабельными клонируемыми.
Ок. Должен ли я клонировать точку, которая движется по экрану? Т.е. меняя координаты, я по вашему обязан создавать новый VO для этой точки?
Расширим немного пример до полигональной модели, где каждый полигон представлен 3 точками, а модель состоит из миллиона полигонов. Во что это выльется?
источник

А

Алексей in Software Design/Architecture/Zen
The Ant 🐜
Ок. Должен ли я клонировать точку, которая движется по экрану? Т.е. меняя координаты, я по вашему обязан создавать новый VO для этой точки?
Расширим немного пример до полигональной модели, где каждый полигон представлен 3 точками, а модель состоит из миллиона полигонов. Во что это выльется?
Вообще создание новой точки/клонирование не должно быть какой-то длительной операцией и во многих языках обычно и не является. Ну кроме динамических или той же Java.
источник

˸A

˸̧̨ ͅBlack Akula˸̧̨ ... in Software Design/Architecture/Zen
Jerzy Syrowiecki
если данные не описывать объектами, то всё хорошо с иммутабельностью
В джс не получится - там даже массив - это объект))
источник

SM

Sergey Milimko in Software Design/Architecture/Zen
Если точек миллионы то очевидно что они не должны быть объектами
источник

JS

Jerzy Syrowiecki in Software Design/Architecture/Zen
˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪
В джс не получится - там даже массив - это объект))
да, этот вопрос надо ставить при проектировании или выборе языка
источник

R

Roman in Software Design/Architecture/Zen
Опять дискуссия скатилась в переставление и экономию байтиков
источник

JS

Jerzy Syrowiecki in Software Design/Architecture/Zen
Sergey Milimko
Если точек миллионы то очевидно что они не должны быть объектами
мне не очевидно. объясните
источник

А

Алексей in Software Design/Architecture/Zen
Sergey Milimko
Если точек миллионы то очевидно что они не должны быть объектами
а чем должны быть?
источник

SM

Sergey Milimko in Software Design/Architecture/Zen
Оверхед по производительности большой будет если использовать сущности требующие выделения памяти в куче и если этих сущностей слишком много
источник

SM

Sergey Milimko in Software Design/Architecture/Zen
Целыми числами например
источник