Когда я впервые услышал термин чистая функция, мне было очень любопытно узнать, чем она отличается от обычных функций.

Давайте определим Чистую функцию:

Чистая функция определяется как

1. Функция, которая всегда производит/возвращает один и тот же результат (выход), если ей передаются одни и те же аргументы (ввод).

2. Это зависит только от входных аргументов.

3. Это не зависит от состояния или данных, которые сохраняются за пределами его функции.

4. Функция, не вызывающая побочных эффектов.

Короче говоря, Pure function — это функция, ввод которой зависит от переданных ей аргументов и не вызывает никаких побочных эффектов.

Что такое побочный эффект?

Говорят, что функция или выражение имеют побочный эффект, если они изменяют значение некоторой переменной состояния за пределами своего локального окружения.

Побочный эффект включает в себя:

Выполнение HTTP-запросов
Изменение глобальной/внешней переменной
Манипуляции с DOM
Случайная переменная Math.random()

и так далее..

Нечистые функции

Функция, которая не является чистой, называется нечистой функцией. Другими словами , это функция, которая изменяет внешнюю переменную или ее выходные данные для одного и того же набора входных аргументов, переданных в Это.

Давайте проанализируем этот простой код. Здесь мы передаем массив и элемент для добавления в массив в качестве аргумента функции. Внутри функции мы добавляем элемент, который напрямую изменяет значения внешнего состояния (побочный эффект). Это пример нечистой функции.

Другой пример — Math.random().

Math.random создает новое случайное число от 0 до 1 всякий раз, когда мы его запускаем. Так что это нечистая функция.

Давайте сделаем эту функцию чистой функцией.

Здесь внутри функции мы вернули новый массив с предыдущими элементами uselessArray и добавили новый элемент/элемент. Здесь наш новый массив зависит от входных аргументов и не влияет на внешнее состояние. результат. Это называется чистой функцией

Другой пример
Math.max(1,2,3)

Эта функция возвращает один и тот же вывод, если один и тот же ввод передается много раз.

Чистые функции делают код более простым и гибким.

Не изменяет внешнее состояние.

Модульное тестирование чистой функции очень просто.

Рекомендуется использовать чистую функцию вместо обычной/нечистой, чтобы избежать ошибок.