Функции
Что такое функциональное программирование и какие особенности JS позволяют говорить о нем как о функциональном языке программирования?
Функциональное программирование — это парадигма программирования, основанная на использовании функций как основных строительных блоков.
Особенности функционального программирования:
-
Чистые функции:
- Функции, которые не имеют побочных эффектов и возвращают одинаковый результат для одинаковых аргументов.
-
Функции высшего порядка:
- Функции, которые могут принимать другие функции в качестве аргументов и/или возвращать их.
-
Неизменяемость:
- Состояние объектов не изменяется после их создания; вместо этого создаются новые объекты.
-
Функциональные композиции:
- Создание новых функций путем комбинирования других функций.
Особенности JavaScript как функционального языка:
-
Поддержка функций высшего порядка:
-
Пример:
function map(arr, func) { return arr.map(func); }
-
-
Анонимные функции и функции-стрелки:
-
Пример:
const add = (a, b) => a + b;
-
-
Методы массива для функционального программирования:
-
Пример:
const numbers = [1, 2, 3, 4]; const doubled = numbers.map(n => n * 2);
-
-
Замыкания:
-
Пример:
function createCounter() { let count = 0; return function() { return ++count; }; }
-
Что такое функции высшего порядка (Higher Order Functions)?
Функции высшего порядка — это функции, которые могут принимать другие функции в качестве аргументов и/или возвращать функции в качестве результата.
Основные характеристики:
-
Принимают функции в качестве аргументов:
-
Пример:
function map(array, func) { let result = []; for (let i = 0; i < array.length; i++) { result.push(func(array[i])); } return result; } let numbers = [1, 2, 3, 4]; let doubled = map(numbers, function(n) { return n * 2; }); console.log(doubled); // [2, 4, 6, 8]
-
-
Возвращают функции в качестве результата:
-
Пример:
function createMultiplier(multiplier) { return function(x) { return x * multiplier; }; } let double = createMultiplier(2); console.log(double(5)); // 10
-
-
Композиция функций:
-
Создание новой функции путем объединения других функций.
-
Пример:
function compose(f, g) { return function(x) { return f(g(x)); }; } let addOne = x => x + 1; let square = x => x * x; let addOneThenSquare = compose(square, addOne); console.log(addOneThenSquare(2)); // 9
-
Функции высшего порядка — это мощный инструмент в функциональном программировании, позволяющий создавать более гибкие и абстрактные решения за счет работы с функциями как с данными.
Почему функции в JS называют объектами первого класса (First-class Objects)?
Функции в JavaScript называются объектами первого класса, потому что они обладают всеми свойствами объектов и могут быть использованы как данные.
Основные характеристики:
-
Присваивание переменным:
-
Функции могут быть присвоены переменным.
-
Пример:
const greet = function() { console.log("Hello"); };
-
-
Передача в качестве аргументов:
-
Функции могут быть переданы как аргументы другим функциям.
-
Пример:
function callFunction(fn) { fn(); } callFunction(greet); // Выведет "Hello"
-
-
Возврат из других функций:
-
Функции могут быть возвращены из других функций.
-
Пример:
function createFunction() { return function() { console.log("Hello from returned function"); }; } const newFunction = createFunction(); newFunction(); // Выведет "Hello from returned function"
-
-
Сохранение в структурах данных:
-
Функции могут быть сохранены в массивах и объектах.
-
Пример:
const functions = [greet, createFunction()]; functions[0](); // Выведет "Hello"
-
Функции в JavaScript называются объектами первого класса, потому что они могут быть присваиваемы переменным, передаваться в качестве аргументов, возвращаться из других функций и сохраняться в структурах данных, что делает их гибким и мощным инструментом.