LINUX.ORG.RU

История изменений

Исправление praseodim, (текущая версия) :

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

Объясни, какая мне, по большому счету, разница в этом смысле между двумя вариантами:


a:=func1(x); //1-й вариант
proc1(x,a); //2-й вариант

2-й вариант для одного возвращаемого значения более коряво выглядит, но если возвращается несколько значений, например, еще и статус операции:

a:=func1(x,status);
if status<>0 then begin Writeln('Shit happened'); exit;end;

то в чем проблемы? Для меня тут нет никакого side effect.

Так что получается, что в практических целях изменение переменной, передаваемой по ссылке не является side effect, по крайней мере, если оно документировано и не является неожиданным.

Вот если функция меняет что-то из глобальных переменных - это уже точно побочный эффект.

Исходная версия praseodim, :

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

Объясни, какая мне, по большому счету, разница в этом смысле между двумя вариантами:


a:=func1(x); //1-й вариант
proc1(x,a); //2-й вариант

2-й вариант для одного возвращаемого значения более коряво выглядит, но если возвращается несколько значений, например, еще и статус операции:

a:=func1(x,status);
if status<>0 then begin Writeln('Shit happened'); exit;end;

Так что получается, что в практических целях изменение переменной, передаваемой по ссылке не является side effect, по крайней мере, если оно документировано и не является неожиданным.

Вот если функция меняет что-то из глобальных переменных - это уже точно побочный эффект.