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