Что Такое Чистые Функции В Javascript?

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

Их любят за простоту и тестируемость.

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

Что такое чистые функции в JavaScript?



Контрольный список

Чтобы функция считалась «чистой», она должна удовлетворять двум условиям: - Функция возвращает один и тот же результат каждый раз, когда она вызывается с одним и тем же набором аргументов.

- Никаких побочных эффектов Давайте посмотрим поближе.



1. Тот же ввод => Тот же вывод.

Сравните это:
  
  
  
  
  
   

const add = (x, y) => x + y; add(2, 4); // 6

С этим:

let x = 2; const add = (y) => { x += y; }; add(4); // x === 6 (the first time)

В первом случае значение возвращается на основе заданных параметров, независимо от того, где и когда вы его вызываете.

Если сложить 2 и 4, всегда получится 6. Ничто не влияет на результат. Нечистые функции = противоречивые результаты Второй пример ничего не возвращает. Для выполнения своей работы он полагается на общее состояние, увеличивая переменную за пределами своей области действия.

Эта модель — кошмар для разработчиков.

Совместное состояние вводит зависимость от времени.

Вы получите разные результаты в зависимости от того, когда вы вызвали функцию.

В первый раз результат 6, в следующий раз 10 и так далее.

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



2. Никаких побочных эффектов.



Что такое чистые функции в JavaScript?

Этот тест сам по себе является контрольным списком.

Примеры побочных эффектов:

  1. Модификация входных параметров
  2. консоль.

    log

  3. HTTP-вызовы (AJAX/fetch)
  4. Изменение файловой системы
  5. DOM-запросы
По сути, любая работа, выполняемая функцией, не связана с вычислением конечного результата.

Я советую вам посмотреть видео Боб Мартин.

Вот «нечистая» функция с побочным эффектом.



const impureDouble = (x) => { console.log('doubling', x); return x * 2; }; const result = impureDouble(4); console.log({ result });

консоль.

log Здесь это побочный эффект, но он не повредит. Мы все равно получим те же результаты, используя те же данные.

Однако это может вызвать проблемы.

«Нечистое» изменение объекта

const impureAssoc = (key, value, object) => { object[key] = value; }; const person = { name: 'Bobo' }; const result = impureAssoc('shoeSize', 400, person); console.log({ person, result });

Переменная person была окончательно изменена, поскольку функция была объявлена с использованием оператора присваивания.

Общее состояние означает, что влияние нечистыйАссок уже не совсем очевидно.

Понимание влияния на систему теперь предполагает отслеживание каждой переменной, к которой когда-либо прикасались, и знание ее истории.

Общее состояние = временные зависимости.

Мы можем очистить нечистыйАссок , просто возвращая новый объект с нужными свойствами.

«Очистка»

const pureAssoc = (key, value, object) => ({ .

object, [key]: value }); const person = { name: 'Bobo' }; const result = pureAssoc('shoeSize', 400, person); console.log({ person, result });

Сейчас чистыйАссок возвращает проверяемый результат, и вам не придется беспокоиться, если он изменится где-то еще.

Это можно было сделать так:

const pureAssoc = (key, value, object) => { const newObject = { .

object }; newObject[key] = value; return newObject; }; const person = { name: 'Bobo' }; const result = pureAssoc('shoeSize', 400, person); console.log({ person, result });

Изменение входных данных может быть опасным, но изменение их копии не является проблемой.

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

Изменения ограничены этой небольшой областью, и вы все равно возвращаете значение.

Краткое содержание

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

  • Побочные эффекты включают: изменение ввода, HTTP-вызовы, запись на диск, вывод на экран.

  • Вы можете безопасно клонировать, а затем изменить входные параметры.

    Просто оставьте оригинал без изменений.

  • Синтаксис расширения (.

    синтаксис) — это самый простой способ клонирования объектов и массивов.

Теги: #JavaScript #функции
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.