Іммутабельність у функціях
Подробний опис
Іммутабельність - один із ключових принципів чистих і передбачуваних функцій. Якщо функція змінює передані дані (масив, об'єкт тощо), вона впливає на зовнішній стан → стає нечистою і складною для відлагодження.
Приклад з мутацією (не іммутабельно)
javascript
function addItem(arr, item) {
arr.push(item); // змінює вихідний масив
return arr;
}
const numbers = [1, 2, 3];
const result = addItem(numbers, 4);
console.log(numbers); // [1, 2, 3, 4] - вихідні дані змінилися!Це мутабельний (mutable) підхід - функція змінює свої аргументи.
Іммутабельний варіант
javascript
function addItem(arr, item) {
return [...arr, item]; // створює новий масив
}
const numbers = [1, 2, 3];
const result = addItem(numbers, 4);
console.log(numbers); // [1, 2, 3] - вихідні дані збережено
console.log(result); // [1, 2, 3, 4]Функція не змінила вхідні дані, а повернула нову копію - це і є іммутабельність.
Приклади іммутабельних операцій
| Тип даних | Іммутабельний спосіб |
|---|---|
| Масив | map(), filter(), concat(), spread ([...]) |
| Об'єкт | { ...obj, key: newValue } |
| Рядок | Завжди іммутабельний (у JS рядки не можна змінити) |
Приклади мутабельних операцій (яких варто уникати в чистих функціях)
| Тип даних | Операція |
|---|---|
| Масив | push(), pop(), splice(), sort(), reverse() |
| Об'єкт | Пряме присвоєння obj.key = value |
Навіщо потрібна іммутабельність
Робить функції чистими і передбачуваними Спрощує відлагодження і тестування Виключає побічні ефекти Дозволяє безпечно розпаралелювати операції Полегшує відкат і порівняння станів (наприклад, у React, Redux)
ПІДСУМОК
| Властивість | Іммутабельна функція |
|---|---|
| Змінює вхідні дані | Ні |
| Створює нові структури | Так |
| Побічні ефекти | Немає |
| Передбачуваність | Висока |
| Приклади | map, filter, reduce |
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.