Імутабельність (immutability) - це підхід у програмуванні, за якого дані не змінюються після їх створення. Замість зміни існуючих структур даних створюється нова копія з оновленими значеннями.
Таким чином, в нас не буде неочікуваних оновлень змінних чи обʼєктів. Ця техніка особливо корисна, якщо код складний і заплутаний. Імутабельний код набагато простіше тестувати і він в цілому більш передбачуваний.
Простий приклад використання
// В середині forEach ми мутуємо вихідні дані
// Якщо таких мутацій буде декілька або функція буде велика, ми можемо загубитись в коді.
// Це призведе до неочікуваних багів, які буде складно пофіксити
const users = [
{ name: "Alex", age: 30 },
{ name: "John", age: 25 }
];
users.forEach((user) => {
user.age += 1; // змінює об'єкт всередині існуючого масиву
});
// --------------------------------------------------------------------------------
// Краще буде використати .map, який створить копію масиву, де і будуть зміни.
// Ми не змінюємо вихідний масив, що робить наш код більш передбачуваним і простим
const users = [
{ name: "Alex", age: 30 },
{ name: "John", age: 25 }
];
const updatedUsers = users.map((user) => {
return {
...user,
age: user.age + 1, // створюємо новий об'єкт замість зміни існуючого
};
});
Ця техніка широко поширена в світі JS, особливо на стороні Frontend, наприклад в більшості бібліотек і фреймворків. Також, в самому JS зʼявляються імутабельні альтернативи методів. Наприклад toSorted, toReversed, with, toSpliced i тд.