5.1 Основні концепції
Функції вищого порядку є важливим аспектом функціонального програмування і широко використовуються в JavaScript. Вони дозволяють писати більш абстрактний, компактний і багаторазово використовуваний код.
Що таке функції вищого порядку?
Функції вищого порядку (higher-order functions) — це функції, які приймають як аргументи інші функції або повертають функції як результат. Вони дозволяють використовувати функції як об'єкти першого класу, що дає можливість створювати більш абстрактні та модульні програми.
Приклади функцій вищого порядку
- Передача функцій як аргументів.
- Повернення функцій з інших функцій.
5.2 Передача функцій як аргументів
Використання вбудованих методів масивів
JavaScript надає багато вбудованих методів для роботи з масивами, які є функціями вищого порядку, такими як forEach(), map(), filter(), reduce() та інші.
1. Метод forEach()
Метод forEach() виконує вказану функцію один раз для кожного елемента масиву.
const numbers = [1, 2, 3, 4, 5];
numbers.forEach(function(number) {
console.log(number);
});
// Виведе: 1 2 3 4 5
2. Метод map()
Метод map() створює новий масив з результатами виклику вказаної функції для кожного елемента масиву.
const numbers = [1, 2, 3, 4, 5];
const squaredNumbers = numbers.map(function(number) {
return number * number;
});
console.log(squaredNumbers);
// Виведе: [1, 4, 9, 16, 25]
3. Метод filter()
Метод filter() створює новий масив з усіма елементами, які пройшли перевірку, що задається у переданій функції.
const numbers = [1, 2, 3, 4, 5];
const evenNumbers = numbers.filter(function(number) {
return number % 2 === 0;
});
console.log(evenNumbers);
// Виведе: [2, 4]
4. Метод reduce()
Метод reduce() застосовує функцію до акумулятора та кожного елемента масиву (зліва направо), зводячи його до єдиного значення.
const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce(function(total, number) {
return total + number;
}, 0);
console.log(sum);
// Виведе: 15
5.3 Повернення функцій з інших функцій
Функції вищого порядку можуть повертати інші функції, що дозволяє створювати більш гнучкі та налаштовувані функції.
1. Карування (Currying)
Карування — це процес перетворення функції, яка приймає кілька аргументів, у функцію, яка приймає один аргумент і повертає нову функцію, яка приймає наступний аргумент і так далі.
Приклад карування:
function multiply(a) {
return function(b) {
return a * b;
};
}
const multiplyByTwo = multiply(2);
console.log(multiplyByTwo(5)); // Виведе: 10
const multiplyByThree = multiply(3);
console.log(multiplyByThree(5)); // Виведе: 15
2. Створення налаштовуваних функцій
Функції вищого порядку дозволяють створювати функції, які можна налаштувати за допомогою аргументів.
Приклад:
function createGreeting(greeting) {
return function(name) {
console.log(`${greeting}, ${name}!`);
};
}
const sayHello = createGreeting('Hello');
sayHello('Alice'); // Виведе: Hello, Alice!
const sayHi = createGreeting('Hi');
sayHi('Bob'); // Виведе: Hi, Bob!
5.4 Практичне застосування
Розглянемо практичне застосування функцій вищого порядку.
Функція compose()
Функція compose() дозволяє об'єднувати кілька функцій в одну, яка застосовує їх послідовно:
function compose(...functions) {
return function(initialValue) {
return functions.reduceRight((value, func) => func(value), initialValue);
};
}
const addOne = x => x + 1;
const double = x => x * 2;
const addOneAndDouble = compose(double, addOne);
console.log(addOneAndDouble(5)); // Виведе: 12 (спочатку додає 1 до 5, потім подвоює результат)
Асинхронні функції вищого порядку
Асинхронні функції вищого порядку дозволяють працювати з асинхронними операціями, такими як запити до API або робота з таймерами:
function fetchData(callback) {
setTimeout(() => {
callback('Data received');
}, 1000);
}
function processData(data) {
console.log(data);
}
fetchData(processData);
// Виведе: Data received (через 1 секунду)
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ