Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Іммутабельність у функціях». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**Іммутабельність (immutability)** - це принцип, за якого **дані не змінюються після створення**. У функціях це означає, що вони **не повинні змінювати вхідні аргументи**, а натомість **повертають нові значення**, зберігаючи вихідні дані незмінними. **Ключове:** іммутабельні функції роблять код чистим і передбачуваним, спрощують відлагодження й унеможливлюють побічні ефекти.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення### Подробний опис Іммутабельність - один із ключових принципів **чистих і передбачуваних функцій**. Якщо функція змінює передані дані (масив, об'єкт тощо), вона **впливає на зовнішній стан** → стає **нечистою** і **складною для відлагодження**. --- ### Приклад з мутацією (не іммутабельно) ```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` |Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.