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 секунду)
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ