【发布时间】:2014-04-19 04:08:14
【问题描述】:
我假设纯函数必须始终有一个返回类型(即,不能是void),并且无论对象的状态如何,都必须具有相同的输出,并且不纯函数会更改对象的状态或打印对象的状态。
但我使用的教科书指出:
访问器通常包含返回语句,但打印对象状态信息的方法也可以归类为访问器。
我很困惑。哪一个是正确的?
编辑
稍微澄清一下,让我问的是这个问题:
最后一个问题是“给出使用的函数的类型”,那里评论的人说它是一个不纯的函数,因为它正在打印。
那么这个函数是纯的还是不纯的?
【问题讨论】:
-
我一直听说“访问器”被用作“getter”的同义词:一个基本上只返回一个值的函数,可能首先进行一些状态检查。但是这个概念与纯度正交,所以我不太确定你的问题是什么意思。您假设函数子集的属性(“纯函数必须具有返回类型”),然后在完全不同的函数子集上声明另一个属性,然后询问哪个是正确的。没有什么能阻止两者都是正确的(除了我从未听说过访问器的定义)。
-
编辑后,在我看来,这里真正的问题是
access()是否实际上是一个访问器;我会说不是。纯度问题似乎仍然是正交的,从您的问题来看,您似乎已经知道该部分的答案。 :) -
Re“打印对象状态信息的方法也可以归类为访问器。” - 教科书是错误的。
Accessors返回信息给调用者 - 他们不使用“边带”通信(在这种情况下是打印)从对象获取信息到其他地方。打印是一种副作用;它不会被视为“访问”/“访问”数据。 -
请注意,图像中的示例代码无法编译:
access()被声明为返回Void类型的实例,但其主体没有。此外,这个例子违反了 Java 命名约定,因为它规定类名应该用 PascalCase 编写。