Я думал, что мое понимание побочных эффектов в языках программирования было в порядке.
Я думаю, что это отличное определение от википедия:
«в дополнение к возвращению значения, он также изменяет некоторое состояние или имеет
наблюдаемое взаимодействие с вызывающими функциями или внешним миром «.
Тем не менее, я прочитал это по той же ссылке (да, я знаю, что это, вероятно, не лучшее место, чтобы искать примеры):
«Одна общая демонстрация побочного действия — это
оператор присваивания в C ++. Например, присваивание возвращает право
операнд и имеет побочный эффект от присвоения этого значения переменной.
Это позволяет синтаксически чистить несколько назначений:
int i, j;
i = j = 3;
Почему они считают это побочным эффектом? Это так же, как два простых оператора присваивания 2 локальным переменным.
Заранее спасибо.
Вы можете использовать выражение присваивания в качестве значения:
double d = 3.5;
int x, y;
printf("%d", x = d); // Prints "3".
y = (x = d) * 5; // Sets y to 15.
double z = x = d; // Sets z to 3 (not 3.5).
Значение, возвращаемое из x = d
, это его основной эффект. Изменение стоимости x
это побочный эффект.
Если в расчете изменяется состояние мира, например, значение переменной, это побочный эффект.
Например, j = 3
рассчитывает 3, но это также изменяет значение j
как побочный эффект.
Менее тривиальный пример: j += 3
исчисляет j + 3
, но это также устанавливает j
к этому новому значению.
Семантика С запутывает воды: в С основной смысл написания i = 1
получить побочный эффект от назначения переменной; не рассчитывает стоимость 1
, Разговоры о назначениях как побочных эффектах имеют больше смысла с функциональными языками программирования, такими как Haskell или Erlang, где переменные могут быть назначены только один раз.
Я полагаю, что это потому, что j = 3
имеет предполагаемый эффект присвоения значения 3
в j
но также имеет побочный эффект возврате значение j