是否依赖于公共类成员的函数可以被认为是纯粹的

时间:2017-11-01 07:08:43

标签: function computer-science definition computer-science-theory

偶然发现this question后,我想到了如何定义一个纯函数。我有两个规则来接受一个纯函数,它与顶部答案中引用的定义略有不同。我很想知道我的观点是否正确。 我的“2条规则”是:

  • 该功能不会改变程序的状态。
  • 对于相同的参数相同的本地公共程序状态,输入是常量。

澄清第二点,public我主要是arguments班级成员。局部意味着状态与函数紧密相关并且是独占的(即不是某些全局变量)。 我使用该定义的原因是它只是一个更加扩展的视图(可能对CS来说太具体了),因为我看到local public state只是传递函数参数的不同接口。 这个定义是可接受的还是包含一个类上下文会破坏函数的“修剪”?

编辑:作为我的意思,请考虑以下类(C ++)。

class Foo
{
public: 
    int Number;

    int foo(int v) { return Number + v; }
} 

考虑到实例函数调用实际上是以下调用:

foo(&this, 123)

这与通过结构传递公共数据(Number)有什么不同?

struct Foo
{
    int Number;
} 

foo(Foo { 1 }, 123);

1 个答案:

答案 0 :(得分:4)

不,那个“或同一个本地公共程序状态”不在其他人都同意的纯方法定义中。

纯函数仅根据输入参数和输入参数计算值,除了返回计算值之外,不会产生任何可观察到的副作用。

我建议你看看Wikipedia page on Pure function,因为它显示了一些例子。

-

另请注意,“没有可观察到的副作用”并不意味着“无任何副作用”,但与这两者重叠的灰色区域通常仅包括您无法控制且通常不会观察到的特定于运行时的副作用。< / p>

这还包括诸如“有足够的内存来分配所需的内存”之类的状态。