Переделайте функцию add, чтобы сделать ее чистой

Вынесите случайность, сеть, чтение DOM и логирование за пределы вычисления. Чистая функция должна получать все данные аргументами и возвращать новый результат, не меняя params и внешний x.

Короткий ответ

Что ответить на собеседовании

Вынесите случайность, сеть, чтение DOM и логирование за пределы вычисления. Чистая функция должна получать все данные аргументами и возвращать новый результат, не меняя params и внешний x.

Подробный разбор

Ответ с пояснениями

Условие

Задача — очистить функцию add, удалив все, что нарушает принципы чистой функции.

let x = 2;

const add = async (params, y) => {
  params.value = y;
  y += y + Math.random(params.value);
  x += y;

  console.log('doubling', x);

  const { data } = await axios({ method: 'get', url: '/' });

  const elem = document.getElementById('elem');
  const width = elem.getBoundingClientRect().width;

  return x + data + width;
};

add({ value: 4 }, 1);

Ответ

Вынесите случайность, сеть, чтение DOM и логирование за пределы вычисления. Чистая функция должна получать все данные аргументами и возвращать новый результат, не меняя params и внешний x.

function add({ params, y, x, randomValue, data, width }) {
  const nextY = 2 * y + randomValue;
  const nextX = x + nextY;
  return {
    params: { ...params, value: y },
    x: nextX,
    value: nextX + data + width
  };
}

Предполагаются числовые x/y/randomValue/data/width. Math.random игнорирует переданный аргумент, поэтому params.value не влиял на случайное число. Оболочка с побочными эффектами отдельно получает ответ сервера и ширину, вызывает чистую add и при необходимости сохраняет результат или логирует. async внутри чистого арифметического ядра больше не нужен.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее