Автор оригинала: FreeCodeCamp Community Member.
Гидо Шмице
Неизмерность является одним из строительных блоков функционального программирования. Это позволяет писать более безопасный и более чистый код. Я покажу вам, как вы можете добиться неизменности через некоторые примеры JavaScript.
По словам Википедии ( источник ):
Неизменные массивы
Массивы – хорошая отправная точка, чтобы получить понимание того, как работает неизменность. Давайте взглянем.
const arrayA = [1, 2, 3];arrayA.push(4); const arrayB = arrayA;arrayB.push(5); console.log(arrayA); // [1, 2, 3, 4, 5]console.log(arrayB); // [1, 2, 3, 4, 5]
Этот пример назначает ArrayB ссылку возвышать Таким образом, метод push добавляет значение 5 в обе вариации. Наш код косвенно мутирует другие ценности, что не то, что мы хотим сделать. Это нарушает принцип неизменности.
Мы можем улучшить наш пример, чтобы быть неизменным, используя ломтик Функция, и поведение кода отличается.
const arrayA = [1, 2, 3];arrayA.push(4); const arrayB = arrayA.slice(0);arrayB.push(5); console.log(arrayA); // [1, 2, 3, 4]console.log(arrayB); // [1, 2, 3, 4, 5]
Это именно то, что мы хотим. Код не мутирует другие значения.
Помните: при использовании толчок Чтобы добавить значение на массив, вы Мутирование массив. Вы хотите избежать мутационных переменных, потому что он может привести к побочным эффектам в вашем коде. ломтик Функция возвращает копию массива.
Функции
Теперь вы знаете, как избежать мутации других ценностей. Как бы вы написали функции, чтобы быть «чистым»? Чистое слово – это другое слово, чтобы вызвать функцию, которая не имеет побочных эффектов и не будет изменять состояние.
Давайте посмотрим на функцию, которая использует тот же принцип при примере массивов. Сначала мы создаем функцию, которая мутирует другое значение, то мы улучшаем функцию, чтобы быть «чистым».
const add = (arrayInput, value) => { arrayInput.push(value); return arrayInput;};
const array = [1, 2, 3]; console.log(add(array, 4)); // [1, 2, 3, 4]console.log(add(array, 5)); // [1, 2, 3, 4, 5]
Так что опять же, мы Мутирование Наш вклад, который создает непредсказуемую функцию. В мире функционального программирования есть золотое правило вокруг функций: Функция с таким же входом всегда должна возвращать один и тот же результат Отказ
Функция выше нарушает золотое правило. Каждый раз наше Добавить Функция называется, это мутирует массив Переменная и результат отличается.
Давайте посмотрим, как мы можем изменить реализацию наших Добавить Функция, так что это неизменно.
const add = (arrayInput, value) => { const copiedArray = arrayInput.slice(0); copiedArray.push(value); return copiedArray;}; const array = [1, 2, 3];
const resultA = add(array, 4);console.log(resultA); // [1, 2, 3, 4]
const resultB = add(array, 5);console.log(resultB); // [1, 2, 3, 5]
Теперь мы можем назвать нашу функцию несколько раз и ожидать, что вывод будет такой же, основанный на входе. Это потому, что мы больше не мутируем массив Переменная. Мы можем назвать эту функцию «Pure Function».
Мы можем использовать Распространение синтаксиса , доступно в ES6, чтобы сократить эту функцию.
const add = (arrayInput, value) => […arrayInput, value];
Параллельность
Nodejs Приложения используют концепцию, называемую параллелизмом. Опасность одновременной операции означает, что два вычисления могут добиться прогресса независимо от другого. Если есть два потока, второе вычисление не нужно ждать завершения первого для продвижения.
Nodejs делает возможным параллелизм с контуром события. Структура событий несколько раз берет событие и запускает любые обработчики событий, прослушивающие это событие одно за раз. Эта модель позволяет приложением NODEJS обрабатывать огромное количество запросов. Если вы хотите узнать больше, читать Эта статья о контуре события Отказ
Что касается неизменности связана с параллелизмом? Поскольку несколько операций могут изменить значение за пределами объема функции одновременно, это создает ненадежный выход и вызывает неожиданные результаты. Будьте в курсе функции, которая мутает переменные вне его объема, так как это может быть действительно опасным.
Следующие шаги
Неизмермость – важная концепция, чтобы понять в вашем путешествии, чтобы изучить функциональное программирование. Возможно, вы захотите взглянуть на Immutablejs , написанные разработчиками в Facebook. Библиотека предоставляет некоторые неизменные структуры данных, такие как Карта , Установить и Список Отказ
Immuteable.js, стойкие структуры данных и структурное разделение Зачем использовать Immutable.js вместо обычного объекта JavaScript? Medile.com Функции более высокого порядка: используя фильтр, карту и уменьшить для более ремонсионного кода Функции более высокого порядка могут помочь вам активизировать игру JavaScript, сделав код более объявленным. Это … Medium.freecodeCamp.org.
Нажмите? Ниже так другие люди увидят эту статью здесь на среднем. Спасибо за чтение.