--- id: 587d7b8e367417b2b2512b5e title: Уникайте будь-яких змін та побічних ефектів, використовуючи функціональне програмування challengeType: 1 forumTopicId: 301228 dashedName: avoid-mutations-and-side-effects-using-functional-programming --- # --description-- Якщо ви ще цього не зрозуміли, проблема в попередньому завданні була з `splice` у функції `Close()`. На жаль, `splice` змінює вихідний масив, в якому він викликається, тому другий дзвінок використовував модифікований масив і дав несподівані результати. Це невеликий приклад набагато більшого шаблону - викликається функція змінної, масиву або об'єкта, а функція змінює саме змінну чи щось інше в об’єкті. Одним з основних принципів функціонального програмування - не змінювати речі. Зміни призводять до помилок. Легше уникнути помилок, знаючи, що ваші функції нічого не змінюють, включаючи аргументи функцій чи будь-яку іншу глобальну змінну. Попередній приклад не мав жодних складних операцій, але метод `splice` змінив оригінальний масив і видав помилку. Нагадаємо, що у функціональному програмуванні зміни або зміна речей називається мутацією, і наслідок називається побічним ефектом. В ідеалі функція, повинна бути pure function, це означає, що вона не спричиняє жодних побічних ефектів. Давайте спробуємо освоїти цю дисципліну і не будемо змінювати будь-які змінні або об'єкти в нашому коді. # --instructions-- Ввести код для функції`incrementer` таким чином, значення глобальної змінної `fixedValue` зросло в один раз. # --hints-- Ваша функція `incrementer` не повинна змінювати значення `fixedValue` (яка є `4`). ```js incrementer(); assert(fixedValue === 4); ``` Ваша функція `incrementer` повертає значення, яке на одиницю більше значення `fixedValue`. ```js const __newValue = incrementer(); assert(__newValue === 5); ``` Ваша функція `incrementer` повинна повертати значення на основі глобального змінного значення `fixedValue`. ```js (function () { fixedValue = 10; const newValue = incrementer(); assert(fixedValue === 10 && newValue === 11); fixedValue = 4; })(); ``` # --seed-- ## --seed-contents-- ```js // The global variable let fixedValue = 4; function incrementer() { // Only change code below this line // Only change code above this line } ``` # --solutions-- ```js let fixedValue = 4 function incrementer() { return fixedValue + 1 } ```