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