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

Для кого эта статья?

Эта статья предназначена для всех, кто хоть немного разбирается в программировании, в частности в JavaScript. Вы должны обязательно проверить бесплатные ресурсы, если это не вы. С учетом сказанного, давайте повеселимся.

Начиная

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

Что такое побочный эффект в JavaScript?

Когда мы что-то модифицируем в JavaScript, мы вызываем побочные эффекты, это просто означает модификацию или изменение нашего кода, что приводит к его непредсказуемому поведению и изменчивости. Давайте лучше поймем это, взглянув на этот простой фрагмент кода.

//side effect
const fruits = ['pineapple','orange','pawpaw','kiwi']
function removeData(dataArr){
return dataArr.pop()
}
removeData(fruits)

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

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

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

function sayHello(){
console.log('Hello')
}
sayHello()

Этот код также вызовет побочные эффекты, потому что console.log () принадлежит оконным объектам, мы всегда хотим писать предсказуемые программы. То есть ввод всегда должен быть равен выводу, производимому функциями.

Качество хороших функций

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

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

Как избежать побочных эффектов в нашей программе?

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

Чистые функции, что это такое?

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

// remedy for side effects
const arr = [1,2,3]
function removeItem(item){
const newArr = [].concat(item);
newArr.pop()
return newArr
}
// console.log(removeItem(arr));
// console.log(arr);

В приведенном выше коде все, что мы делаем, - это удаляем элемент из массива, метод concat() гарантирует, что мы не изменим предоставленный массив, сделав вместо этого копию.

Мы также избегали глобальных переменных и использовали вместо них локальные, это предотвратит доступ из внешнего мира, то есть переменные не могут быть вызваны вне блока кода. То, что мы называем областью видимости в JavaScript, но я не собираюсь здесь говорить об этом, поскольку это выходит за рамки статьи.

Почему чистые функции - лучшее решение для устранения побочных эффектов в JavaScript?

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

Значение

  • Предсказуемость: когда мы пишем чистые функции, мы всегда знаем, чего ожидать, потому что это не влияет на внешнюю переменную.
  • Тест: упрощает проверку функции.
  • Композиция: композиция - это использование небольших фрагментов кода для создания более крупных. Примером этого является метод compose(). Чистая функция делает это возможным.
  • Неизменяемость: означает невозможность изменить данные или состояние, при написании чистых функций мы делаем копии вместо изменения исходных данных, например
const obj = {name: 'iggy'}
function clone(obj){
return {...obj} // immutability (making copies)
}
function updateName(obj){
const obj = clone(obj);
obj2.name = 'sewa'
return obj2
}
const updateObj = updateName(obj)

Здесь изменение имени-значения не приведет к изменению объекта, потому что с помощью оператора распространения мы сделали копию всего, что содержится в объекте.

Наконец, чистые функции помогают нам минимизировать ошибки в нашей программе.

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

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

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

Заключение

Побочные эффекты не обязательно плохи, но цель здесь - организовать ваш код таким образом, чтобы изолировать вещи друг от друга. Если вы хотите узнать больше о побочных эффектах и ​​чистых функциях. Рекомендую заглянуть на этот ресурс.

Вот и все, ребята, я надеюсь, что вам всем понравилось читать эту статью, и, надеюсь, это поможет вам писать лучшие программы с помощью чистых функций, пожалуйста, не стесняйтесь задавать мне любые вопросы, если вы не на 100% понятны , Я также открыт для отзывов, поэтому не стесняйтесь сообщить мне, что, по вашему мнению, мне следует улучшить.

Удачного кодирования и спасибо за чтение!

Больше контента на plainenglish.io