Тема 2. Подготовка материалов для выступления по функциональному программированию на языке JavaScript
Функциональное программирование — парадигма программирования, в которой процесс вычисления трактуется как вычисление значений функций в математическом понимании последних (в отличие от функций как подпрограмм в процедурном программировании).
Принципы функционального программирования:
- чистые функции;
- иммутабельность;
- ссылочная прозрачность;
- функции как объекты первого класса;
- функции высшего порядка;
- рекурсия.
Чистыми называют функции, которые не имеют побочных эффектов ввода-вывода и памяти (они зависят только от своих параметров и возвращают только свой результат). Чистые функции для одних и тех же аргументов возвращают одинаковый результат.
Пример чистой функции:
function multuply(a, b) {
return a * b;
}
Иммутабельность - невозможность изменения сущности. Пример функции:
function slugify(str) {
return str.toLowerCase().trim().split(' ').join('-');
}
let str = 'some url text';
slugify(str);
Приведённые в коде функции позволяют создать функцию для преобразования строки, не меняющую исходную строку.
Если функция неизменно возвращает один и тот же результат для одних и тех же передаваемых ей входных значений, она обладает ссылочной прозрачностью.
Идея восприятия функций как объектов первого класса заключается в том, что такие функции можно рассматривать как значения и работать с ними как с данными. При этом можно выделить следующие возможности функций:
- Ссылки на функции можно хранить в константах и переменных и через них обращаться к функциям.
- Функции можно передавать другим функциям в качестве параметров.
- Функции можно возвращать из других функций.
Функции высших порядков — это такие функции, которые могут принимать в качестве аргументов и возвращать другие функции.
В JavaScript стандартные методы массивов filter
, map
и reduce
принимают в качестве аргументов функции.