6. Функции
Чистая функция — это детерминированная функция, которая не производит побочных эффектов. Такая функция зависит только от своих входных аргументов и всегда ведёт себя предсказуемо.
Command-query Separation (CQS) — принцип программирования, изобретённый Бертраном Мейером, создателем языка Eiffel. Согласно этому принципу, каждая функция является либо командой, которая выполняет действие (action), либо запросом (query), который извлекает данные, но не тем и другим одновременно. Команда всегда связана с выполнением побочных эффектов, а чистые функции возможны только для запросов.
В языках программирования существует понятие «объекты первого рода (или класса)». Им обозначают элементы, которые могут быть переданы в функции, возвращены из функций и присвоены переменным (или константам). Сама переменная (или константа) под это понятие не попадает, объектом первого рода считаются те данные, которые лежат в переменной (или константе).
Функции высшего порядка — это функции, которые либо принимают, либо возвращают другие функции, либо делают всё сразу. Такие функции, как правило, реализуют некий обобщённый алгоритм (например, сортировку), а ключевую часть логики делегируют вам через callback-функцию.
users.sort((a, b) => {
if (a.age === b.age) {
return 0;
}
return a.age > b.age ? 1 : -1;
});
users.sort((a, b) => Math.sign(a.age — b.age)); // То же самое но используя функцию Math.sign
map «отображает» каждый элемент исходного массива в элемент возвращаемого. Всегда возвращает массив того же размера.
Filter
- Фильтрация возвращает коллекцию либо того же размера (если ничего не было отфильтровано), либо меньшего. Она может вернуть даже пустую коллекцию, если ни один из элементов не подошёл.
- Фильтрация всегда возвращает исходные элементы. Она никогда не делает отображение. Если на вход фильтрации поступил список пользователей, то список пользователей будет и на выходе.
reduce — принимает на вход два значения. Первый — текущее значение аккумулятора, второй — текущий обрабатываемый элемент. Задача функции — вернуть новое значение аккумулятора.
Паради́гма программи́рования — это совокупность идей и понятий, определяющих стиль написания компьютерных программ (подход к программированию). Это способ концептуализации, определяющий организацию вычислений и структурирование работы, выполняемой компьютером.

Императивная парадигма — стиль написания кода в виде набора последовательных инструкций (команд) с активным использованием переменных.
Императивному стилю противопоставляют декларативный, который нередко называют функциональным. Ключевое отличие функционального стиля от императивного в том, что при таком стиле программа выглядит как спецификация, а не как набор инструкций.
Другие разновидности функциональной или императивной парадигм:
- Логическое программирование
- Автоматное программирование
- Объектно-ориентированное программирование
- Метапрограммирование