Files
freeCodeCamp/curriculum/challenges/ukrainian/02-javascript-algorithms-and-data-structures/functional-programming/avoid-mutations-and-side-effects-using-functional-programming.md

3.5 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 у функції 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
}