对于这个问题,我所说的“纯面向对象编程语言”是指函数只能存在于(静态或非静态)对象内部,即作为方法。
考虑以下Java代码:
在这个例子中:
1.
第一个问题的答案取决于如何理解方法与函数的关系,即方法是否被认为是函数的一种类型或仅仅是它们最接近的面向对象编程(OOP)等效物。
第二个问题的答案取决于将值注入到对象中的字段是否可以被视为使用这些字段的相关方法的输入(假设纯函数是对于相同的输入给出相同输出的函数)。认为如此的原因是承认对于任何对象,特别是那些表现出高内聚性的对象,将其内部的任何n参数方法转换为一个
注意:我认识到这个问题的答案很大程度上是语义/约定的问题。我想知道是否有关于这个问题达成的共识,如果有的话,是什么。
考虑以下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;
}
}
在这个例子中:
1.
Math.addExact
是一个纯函数吗?
2. Addends.sum
是一个纯函数吗?第一个问题的答案取决于如何理解方法与函数的关系,即方法是否被认为是函数的一种类型或仅仅是它们最接近的面向对象编程(OOP)等效物。
第二个问题的答案取决于将值注入到对象中的字段是否可以被视为使用这些字段的相关方法的输入(假设纯函数是对于相同的输入给出相同输出的函数)。认为如此的原因是承认对于任何对象,特别是那些表现出高内聚性的对象,将其内部的任何n参数方法转换为一个
n-m
参数方法都是相当容易的,只需通过将m
个值注入到m
个不可变字段中,并将这些字段分配给该对象的m
参数构造函数即可。注意:我认识到这个问题的答案很大程度上是语义/约定的问题。我想知道是否有关于这个问题达成的共识,如果有的话,是什么。
问题被关闭为基于观点的澄清:如上所述,我并不是要求个别贡献者对这个问题发表意见:我想知道程序员和/或计算机科学家是否在像给出的那些例子中达成了一致,基于a)方法是否被认为是函数,以及b)在纯函数的定义中“输入”被广泛解释的方式; 如果有收敛,那就是什么。比较
- 基于观点:道德是什么?
- 非基于观点:维基百科上如何定义道德?
- 有争议的:不可数集是否存在?
- 无争议的:在古典集合论中是否可以证明不可数集的存在(是)? 直觉主义集合论呢(否)?