Определение чистой функции в основном состоит из двух утверждений:

  • Функция всегда возвращает один и тот же результат, если переданы одни и те же аргументы. Другими словами, при одном и том же вводе она всегда будет возвращать один и тот же вывод.
  • Функция не вызывает никаких семантически наблюдаемых побочных эффектов, таких как сетевые запросы, изменяемые объекты или вывод на устройства ввода-вывода и т. Д.
const mutiply = (x, y) => x * y // Is a pure function

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

Давайте посмотрим на другой пример:

const fetchUser = API.getUser(10);

Является ли fetchUser чистой функцией? Возвращает ли он то же значение (пользователь с идентификатором 10), верно? Ответ - нет. Эта функция иногда работает так, как мы ожидаем, но иногда сервер не отвечает, и мы получаем ошибку 500. API может измениться, так что этот вызов больше не действителен. Итак, эта функция недетерминирована, поэтому мы можем сказать, что это нечистая функция.

Зачем мне нужны чистые функции?

Тестируемость: . Поскольку чистые функции детерминированы, писать для них модульные тесты очень просто. Они также значительно упрощают рефакторинг кода. Вы можете изменить чистую функцию и не беспокоиться о побочных эффектах, которые могут испортить все приложение.

Читаемость: из-за побочных эффектов наш код становится труднее читать. Нечистая функция не является детерминированной, поэтому она может возвращать разные значения для заданного ввода, и в итоге мы пишем код, который должен иметь дело со всеми различными возможностями.

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

Счастливый код! Спасибо!