副作用和引用透明度有什么区别?

gab*_*x01 2 functional-programming

这些术语有什么区别?

  • 函数没有副作用

  • 函数是引用透明的

is7*_*s7s 5

引用透明的函数肯定没有副作用。然而,没有副作用的函数并不总是引用透明的。

例子:

int x = 0;

int referentiallyTransparent(int y)
{
    return y + 1;
}

int hasNoSideEffects(int y)
{
    return x + y;
}
Run Code Online (Sandbox Code Playgroud)

该功能hasNoSideEffects没有副作用。这意味着调用hasNoSideEffects(y)不会影响程序的状态。然而,它返回的值受程序状态的影响,并且不仅仅取决于输入变量y,因此调用hasNoSideEffects(y)不能总是被它减少到的值替换。