История изменений
Исправление 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, по крайней мере, если оно документировано и не является неожиданным.
Вот если функция меняет что-то из глобальных переменных - это уже точно побочный эффект.