Вопрос №55800 от пользователя Сириус в уроке «Чистые функции», курс «Введение в программирование»

Сириус

let multiplier = 10;

const getIncreasedNumber = num => num * multiplier;

getIncreasedNumber(7); // 70
getIncreasedNumber(7); // 70
multiplier = 5;
getIncreasedNumber(7); // 35

Почему ответ "ДА" считается неверным? ...

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

... это противоречит видео и теории.

Если f вернёт значение a вместо true, то она, очевидно, недетерминированная функция с побочными эффектами

let a = 0;

const f = () => {
  a = a + 1;
  return a;
}

f();

Вы никогда не можете точно знать, какое f вернёт значение, пока не узнаете что-то ещё. Это зависит от внешнего фактора, а именно от текущего значения a.

1 0

Maksim Litvinov

Функция getIncreasedNumber() недетерминированная, так как её результат зависит от внешних данных. Но эта функция не обладает побочным эффектом, так как она не меняет ничего во внешнем окружении (не меняет значение переменной multiplier).

let multiplier = 10;
const getIncreasedNumber = num => num * multiplier;
getIncreasedNumber(7); // 70
console.log(multiplier); // 10

Функция f(), которую вы привели, напротив, меняет значение внешней переменной a, поэтому это функция с побочным эффектом.

let a = 0;

const f = () => {
  a = a + 1;
  return a;
}

f();

console.log(a); // 1
0

Используйте Хекслет по максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»

Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Фронтенд-разработчик
Профессия
Разработка фронтенд-компонентов веб-приложений
25 мая 10 месяцев
Иконка программы Python-разработчик
Профессия
Разработка веб-приложений на Django
25 мая 10 месяцев
Иконка программы PHP-разработчик
Профессия
Разработка веб-приложений на Laravel
25 мая 10 месяцев
Иконка программы Node.js-разработчик
Профессия
Разработка бэкенд-компонентов веб-приложений
25 мая 10 месяцев
Иконка программы Fullstack-разработчик
Профессия
Новый
Разработка фронтенд и бэкенд компонентов веб-приложений
25 мая 16 месяцев
Иконка программы Верстальщик
Профессия
Вёрстка с использованием последних стандартов CSS
в любое время 5 месяцев
Иконка программы Java-разработчик
Профессия
Разработка приложений на языке Java
25 мая 10 месяцев
Иконка программы Разработчик на Ruby on Rails
Профессия
Создает веб-приложения со скоростью света
25 мая 5 месяцев