Читать книгу 100 вопросов на собеседование по JavaScript. С подробными объяснениями - - Страница 16
JavaScript: Ответы на вопросы
14. Какие основные принципы функционального программирования можно использовать в JavaScript?
ОглавлениеПринципы функционального программирования в JavaScript включают использование функций высшего порядка, чистых функций, неизменяемости данных и функций map, filter и reduce для обработки данных. Эти концепции помогают создавать более чистый, модульный и легко поддерживаемый код.
Рассмотрим каждый из этих принципов более детально:
1) Функции первого класса (First-Class Functions). В JavaScript функции являются объектами первого класса, что означает, что их можно присваивать переменным, передавать как аргументы, возвращать из других функций.
const greet = function (name) {
return `Hello, ${name}!`;
};
const sayHello = greet;
console.log(sayHello("John")); // Output: Hello, John!
2) Чистые функции (Pure Functions). Чистая функция возвращает результат, основываясь только на своих аргументах, не имеет побочных эффектов и не зависит от глобального состояния.
function add(a, b) {
return a + b;
}
console.log(add(2, 3)); // Output: 5
3) Неизменяемость (Immutability). Изменение состояния может привести к ошибкам и сложностям в отладке. В функциональном программировании ценится неизменяемость данных, и вместо изменения существующих данных создаются новые.
const numbers = [1, 2, 3];
const newNumbers = […numbers, 4]; // создание нового массива с добавлением элемента
console.log(newNumbers); // Output: [1, 2, 3, 4]
4) Функции высшего порядка (Higher-Order Functions). Это функции, которые принимают другие функции в качестве аргументов или возвращают их. Они позволяют абстрагировать операции и создавать более гибкий и читаемый код.
const multiplyBy = function (factor) {
return function (number) {
return number * factor;
};
};
const double = multiplyBy(2);
console.log(double(5)); // Output: 10
5) Рекурсия. Вместо циклов используется рекурсия для выполнения повторяющихся задач. Рекурсивные функции вызывают сами себя с изменяющимися аргументами.
function factorial(n) {
return n === 0 ? 1 : n * factorial(n – 1);
}
console.log(factorial(5)); // Output: 120
6) Функциональные комбинаторы. Это функции, которые комбинируют другие функции, чтобы создавать новые. Примеры включают map, filter, и reduce.
const square = x => x * x;
const increment = x => x + 1;
const squareAndIncrement = compose(increment, square);
console.log(squareAndIncrement(3)); // Output: 10
7) Каррирование (Currying). Процесс преобразования функции с множеством аргументов в цепочку функций, каждая из которых принимает только один аргумент.
const square = x => x * x;
const increment = x => x + 1;
const squareAndIncrement = compose(increment, square);
console.log(squareAndIncrement(3)); // Output: 10