我对Java和纯函数有几点怀疑。据我所知,纯函数是这两个语句所具有的函数:
根据那个(以及作为一个例子),这个函数是纯粹的:
int sum(int a, int b) { return a + b; }
然而,这个功能会被认为是纯粹的吗?
int sum(Person a, Person b) { return a.getAge() + b.getAge(); }
我的猜测是否定的,因为结果会有所不同,具体取决于您作为参数传递给函数的Person对象。
考虑到Java中的对象(以及一般的OO语言)隐藏信息,是否可以将涉及对象的任何函数视为纯粹的参数?
另一个问题,语言/程序是否可以被认为是纯粹的,如果它的任何功能都不纯粹?
考虑到所有这些,一个Java程序(相当复杂)可能只由纯函数组成(纯粹,可以这么说)还是只是不可能的东西?
另一个问题,就编译器而言,lambda表达式只能使用final(或有效的最终)变量:
// Correct
int f = 0;
IntStream.of(1,2,3).map(e -> e * f).forEach(System.out::println);
// Compilation error
int g = 0;
IntStream.of(1,2,3).map(e -> e * g).forEach(System.out::println);
g = 22;
这段代码编译的情况怎么可能?
// Correct
int[] f = new int[]{ 0 };
IntStream.of(1,2,3).map(e -> e * f[0]).forEach(System.out::println);
f[0] = 25;
答案 0 :(得分:0)
任何涉及对象作为参数的函数都可以被认为是纯粹的吗?
是的,如果参数是不可变的。
我的猜测是否定的,因为结果会有所不同,具体取决于您作为参数传递给函数的Person对象。
这不正确的原因。但是同一个对象在不同的时间点可以有不同的年龄。
如果某个语言/程序的任何功能不纯粹,那么它是否可以被认为是纯粹的?
我不确定,但我回答为“否”,因为pure
的含义被这个不纯的功能所蔑视。
这段代码编译的情况怎么可能?
因为参考是最终的。