这些条款之间有什么区别?
一项功能没有副作用
一个功能是参照透明的
答案 0 :(得分:2)
一个引用透明的功能肯定没有副作用。但是,没有副作用的功能并不总是具有透明性。
示例:
int x = 0;
int referentiallyTransparent(int y)
{
return y + 1;
}
int hasNoSideEffects(int y)
{
return x + y;
}
函数hasNoSideEffects
没有副作用。这意味着调用hasNoSideEffects(y)
不会影响程序的状态。但是,它返回的值受程序状态的影响,并且不仅仅依赖于输入变量y
,因此调用hasNoSideEffects(y)
不能总是被它减少的值替换。