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

Предположим, мы создали глобальный массив и хотим, чтобы его значение оставалось постоянным на протяжении всего кода. Например, мы взяли массив с именем «foo»:

var foo = [1, 2, 3];

Теперь по ошибке мы использовали то же имя переменной «foo» в качестве локальной переменной внутри функции или где-либо еще для определения любого массива или значения. Затем его стоимость меняется. Например, мы создали новую переменную «foo1», и предположим, что мы присвоили ее значение точно так же, как foo, просто добавив еще один элемент (скажем «4») с помощью push ():

var foo1 = foo.push (4);

Теперь значение для «foo» также изменится из этого кода, потому что функция push () добавит 4 в конец массива «foo», из-за чего его значение станет - [1, 2, 3, 4]

Это известно как мутация. То есть мы должны изменить значение для конкретной структуры данных, чего мы не хотим, либо по ошибке, либо из-за плохой практики кода, либо одним или другим способом.

Но мы не хотим, чтобы наша переменная «foo» повторно присваивала свое значение чему-то другому. Следовательно, мы можем сделать нашу переменную неизменной, чтобы ее значение нельзя было изменить, даже если мы переназначили ее значение где-то в коде.

Но что насчет значения «foo1». Мы должны присвоить его значение [1, 2, 3, 4], не изменяя значение «foo».

Теперь большинство из нас думает о прямом присвоении значения «foo1» как:

var foo1 = [1,2,3,4];

Это правильно, но как насчет того, чтобы создавать большие файлы с сотнями или тысячами переменных и функций. Кроме того, у которых одинаковые элементы или общие значения. Затем, если мы присвоим переменной каждое значение напрямую, это сделает код более громоздким и займет больше памяти. Это плохие практики.

Чтобы решить эту проблему, мы можем использовать различные типы библиотек, такие как «MORI» или «IMMUTABLE.JS». Эти библиотеки помогают нам сделать значение переменной постоянным, чтобы его значение не могло изменяться между кодами. Кроме того, это может быть полезно при определении других переменных с помощью неизменяемых переменных, созданных с помощью этих библиотек. Например, у нас есть библиотека «immutable.js», и мы определили значение «foo», используя ее:

var imjs = require («неизменяемый»);

var foo = imjs.List.of (1,2,3); // Результаты в [1,2,3]

var foo1 = foo.push (4); // Результаты в [1,2,3,4]

Теперь значение «foo» не изменится, потому что мы сделали его неизменяемым. То есть его значение [1, 2, 3]. Но значение «foo1» теперь будет - [1, 2, 3, 4].

Работа этих библиотек:

Еще одна важная вещь заключается в том, что если мы хотим ввести новое значение вместо определенного значения массива «foo», не изменяя исходное значение массива «foo». Произойдет такая же опечатка, что изменится исходное значение. Самый простой способ очень быстро справиться с этим - использовать древовидную структуру.

Мы можем взять пример дерева, у которого есть основной ствол, который становится меньше и делится на множество ветвей по мере продвижения вверх. Далее на каждой ветке много листочков. Мы можем рассматривать основную ствол дерева как главное значение переменной, ветви как фрагменты значения переменной, а листья как более мелкие фрагменты переменной, из которых данные могут быть легко извлечены или изменены. Точно так же мы можем разделить все значение на более мелкие фрагменты, затем присвоить новое значение этому конкретному фрагменту, а затем объединить фрагменты для создания нового массива. Это может уменьшить количество человеческих усилий, а также сэкономить много памяти.

Библиотеки «MORI» и «IMMUTABLE.JS» работают так же, как описано выше. Он разбивает данные на фрагменты, изменяет данные конкретного фрагмента на новое значение, а затем объединяет фрагменты для формирования новых данных, так что фактическое значение родительской переменной остается неизменным, а новое значение присваивается другой переменной с использованием родительской переменной.