Чистые функции

Чистые функции

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

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

const dirtyMultiply = (array, value) => {
  for (let i = 0; i < array.length; i += 1) {
    array[i] = array[i] * value;
  }
};

const numbers = [1, 2, 3, 4, 5];

dirtyMultiply(numbers, 2);

// Произошла мутация исходных данных
console.log(numbers); // [2, 4, 6, 8, 10]
Copy

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

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

const pureMultiply = (array, value) => {
  const result = [];

  for (let i = 0; i < array.length; i += 1) {
    result.push(array[i] * value);
  }

  return result;
};

const numbers = [1, 2, 3, 4, 5];
const doubledNumbers = pureMultiply(numbers, 2);

// Не произошло мутации исходных данных
console.log(numbers); // [1, 2, 3, 4, 5]

// Функция вернула новый массив с измененными данными
console.log(doubledNumbers); // [2, 4, 6, 8, 10]

Last updated