3.5 KiB
id, title, challengeType, forumTopicId, dashedName
id | title | challengeType | forumTopicId | dashedName |
---|---|---|---|---|
587d7b8e367417b2b2512b5e | Уникайте будь-яких змін та побічних ефектів, використовуючи функціональне програмування | 1 | 301228 | avoid-mutations-and-side-effects-using-functional-programming |
--description--
Якщо ви ще цього не зрозуміли, проблема в попередньому завданні була з splice
у функції Close()
. На жаль, splice
змінює вихідний масив, в якому він викликається, тому другий дзвінок використовував модифікований масив і дав несподівані результати.
Це невеликий приклад набагато більшого шаблону - викликається функція змінної, масиву або об'єкта, а функція змінює саме змінну чи щось інше в об’єкті.
Одним з основних принципів функціонального програмування - не змінювати речі. Зміни призводять до помилок. Легше уникнути помилок, знаючи, що ваші функції нічого не змінюють, включаючи аргументи функцій чи будь-яку іншу глобальну змінну.
Попередній приклад не мав жодних складних операцій, але метод splice
змінив оригінальний масив і видав помилку.
Нагадаємо, що у функціональному програмуванні зміни або зміна речей називається мутацією, і наслідок називається побічним ефектом. В ідеалі функція, повинна бути pure function, це означає, що вона не спричиняє жодних побічних ефектів.
Давайте спробуємо освоїти цю дисципліну і не будемо змінювати будь-які змінні або об'єкти в нашому коді.
--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
}