Files
freeCodeCamp/curriculum/challenges/ukrainian/02-javascript-algorithms-and-data-structures/functional-programming/avoid-mutations-and-side-effects-using-functional-programming.md
2023-01-20 16:20:37 +01:00

3.4 KiB
Raw Blame History

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
}