pure function (чистая функция)

Чистота функции – это требование к некоторым частям чистемы в Реакте. Она требуется к компонентам, редьюсерам и селекторам.

Характеристики чистых функций

  • Имьютабельность (immutability –”неизменность”) – чистая функция не должна мутировать (менять) то, что в нее пришло. Например, пришли пропсы или другие параметры, то функция не должна их мутировать, иначе это будет side effect (“побочный эффект”).  Проще говоря, функция должна пришедшие параметры обработать и вернуть что-то, не меняя самого “оригинала” пришедших параметров.
    К примеру, некоторые методы массивов меняют оригинал (splice, reverse и др.),  а другие (slice) – создают новый массив. То значит первые мы не можем применять к оригиналу.
    Редьюсеры – это тоже чистые функции. На примере них видно, что если нам нужно что-то все-таки изменить, то мы для этого копию объекта.
  • Читсая функция обязательно имеет return, чтобы что-то возвращать. В реакт это обычно jsx.
  • Чистые функции не должны иметь никаких side effects. К “побочным эффектам” относится то же изменение значений в глобальном мире, асинхронные запросы (это можно делать в методах жизненного цикла или внутри функции useEffect). По этой причине нельзя делать ajax-запросы в редьюсерах, но можно делать b[ в санках (они не чистые функции).
  • Идемпотентность (Idempotence) – свойство возвращать на выходе всегда тот же самый результат при получении одних и тех же данных. Это свойство касается также и запросов (GET-запросы – идемпонетнны, а POST – нет).

2 ответа к «pure function (чистая функция)»

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

    “Идемпотентность (Idempotence) – свойство возвращать на выходе всегда тот же самый результат при получении одних и тех же данных”

    Всегда возникал вопрос, в чем разница ?)

  2. Мой вариант:

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

    Идемпотентность: функцию можно вызывать множество раз без страха, того что она выполнит непредсказуемое действие или вернет непредсказуемый результат (Например вычисление рандомного числа)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *