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

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

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

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

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

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

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

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

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

“Нечистое” изменение объекта

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

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


Назад