出于这个问题的目的,我所说的“纯面向对象编程语言”是指一种函数只能存在于(静态或非静态)对象内部的一种,即作为方法。
考虑以下 Java 代码:
import java.lang.Math;
class Program {
public static void main(string[] args){
Math.addExact(2, 3);
new Addends(2, 3).sum();
}
}
final class Addends {
private final int addend1;
private final int addend2;
Addends(int x, int y){
addend1 = x;
addend2 = y;
}
final int sum(){
return addend1 + addend2;
}
}
在这个例子中:
- 是
Math.addExact
纯函数吗? - 是
Addends.sum
纯函数吗?
第一个问题的答案取决于方法如何被理解为与函数相关,即方法是被认为是函数的种类还是仅仅是它们最接近的 OOP 等价物。
第二个问题的答案取决于是否可以将其值注入对象的字段视为使用这些字段的关联方法的输入(假设纯函数是为相同输入提供相同输出的函数)。这么想的原因是认识到对于任何对象,尤其是那些表现出高内聚力n - m
的对象,通过要求其封闭对象通过注入值来实例化,将其中的任何 n 参数方法转换为参数方法是相当容易的m
,分配给m
不可变字段,放入m
该对象的 -parameter 构造函数中。
注意:我认识到这个问题的答案将部分是语义/约定的问题。我在问是否碰巧就这个问题达成了约定,如果有,它们是什么。
基于意见的问题结束后的澄清:如上所述,我不是在询问个人贡献者对这个问题的意见:我是在询问程序员和/或计算机科学家之间是否存在类似给出的示例,基于 a) 方法是否被视为函数,以及 b) 在纯函数的定义中如何广泛地解释“输入”;如果有收敛,它是什么。相比
- 基于意见:什么是道德?
- 不基于意见:维基百科如何定义道德?
- 争议:存在不可数集吗?
- 没有争议:在经典集合论中是否可以证明不可数集合的存在(是)?直觉主义集合论(否)呢?