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

79 lines
3.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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