Материал предоставлен https://it.rfei.ru

побочный эффект

var users = [];

function addUser(user) {
  users.push(user);
}

function getUserById(id) {
  for (var i = 0; i < users.length; i++) {
    var user = users[i];
    if (user.id == id)
      return user;
  }
  return null;
}

function removeUserById(id) {
  users = users.filter(function(user) {
    return user.id != id;
  });
}

function getMaleUsers() {
  return users.filter(function(user) {
    return user.gender == 'male';
  });
}

Найдите функции с побочными эффектами.

8 лет назад

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

8 лет назад

Добрый день, Николай Дмитриевич.

Судя по Вашим ответам, Вы не понимаете сути “побочных эффектов”. Давайте я объясню Вам это на яблоках.

Допустим у Вас есть ящик с яблоками. Вы только что сложили туда, снятые с Вашей любимой яблони, 100 яблок.

И к Вам в гости зашёл сосед. Допустим, его роль буду выполнять я.

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

Например, я задаю Вам вопрос:

— а какое же (покажи не вынимая из ящика) яблоко самое красное?
— вот это (ваш ответ)

Эта функция не имеет побочного эффекта, потому что яблок не стало ни меньше ни больше.

Теперь я спрашиваю:

— А дай мне самое красное.
— Угощайся (операция удаления из ящика — вынимаете и отдаёте).

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

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

Теперь третий диалог:

— На-ка, сосед, попробуй моих (даю Вам своё яблоко)
— Спасибо. (кладёте яблоко к другим. Добавляете в ящик.)

Тут тоже возник побочный эффект: яблок в ящике стало больше, а функция уже закончилась.

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

Такие функции что-то вычисляют и возвращают результат. Однако, само состояние программы остаётся неизменным.

Надеюсь, это вам поможет.

С уважением,
Капитан Очевидность — Лахтин Станислав Евгеньевич

Ваш комментарий

Комментирование доступно только для авторизованных пользователей.