Страницы

Поиск по вопросам

среда, 29 января 2020 г.

Зачем нужны immutable-объекты?

#javascript #веб_программирование


Мне не очень понятно, как могут использоваться такие объекты. В качестве "констант"?
Но когда нужен такой объект?

Цитата из вики тоже не даёт ясности:


  В программировании неизменяемым (англ. immutable) называется объект, состояние
которого не может быть изменено после создания.


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

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


Ответы

Ответ 1



Представьте что Вы делаете программу для рисования, которая имеет функционал "пошаговый возврат действий". Но для того чтобы возвратится на шаг назад Вам нужно иметь слепок программы в тот самый момент. Поэтому Вы создаете такие компоненты, которые хранят свое состояние в объектах называемые ValueObject. После выполнения какго-то действия нужно пройтись по всей программе и собрать эти объекты, а после сохранить в каком-то хранилище, например массиве. Но тут есть одна проблема - в javascript не примитивные типы передаются по ссылкам. То есть Вы нарисовали первую фигуру и сохранили информационные модели в массив. После нарисовали вторую фигуру и тем самым все информационные модели изменились. Но изменились они не только в компонентах, а ещё и в тот самом массиве, в который мы сохранили данные после рисования первой фигуры. Все, программа сломалась! Для решения этой проблемы и придумали подход в котором объекты каждый раз создаются новые и не изменяются по ходу изменения программы. Еще очень часто приводят в пример удобство при отладки, но на мой взгляд современные отладчики делают тоже самое, показывая изменение программы по слоям. Удобство тестирования - это да, сильный аргумент, ведь можно воссоздать любой момент и быстрее разобраться в причинах бага. Отсутствие побочных эффектов - когда функция начинает работать с неизменяемыми объектами, она перестает изменять внешний код. Отсутствие утечек, на мой взгляд возможен только тогда, когда используется функциональный подход, в котором неизменяемость является фундаментальным принципом.

Комментариев нет:

Отправить комментарий