gpt4 book ai didi

java - 纯函数和 Java

转载 作者:行者123 更新时间:2023-12-04 17:54:39 25 4
gpt4 key购买 nike

我对 Java 和纯函数有几个疑问。据我所知,纯函数是满足这两个语句的函数:

  1. 没有副作用。
  2. 相同输入的相同结果。

据此(作为示例),此函数将是纯函数:

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(或实际上是 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;

最佳答案

could any function that involves objects as parameters be considered pure?

是的,如果参数是不可变的。

My guess is no, because the result is different depending on the Person objects that you pass as parameters to the function.

这不是正确的理由。但是同一个对象在不同的​​时间点可以有不同的年龄。

can a language/program be considered pure if any of its functions is not pure?

我不确定,但我的回答是“否”,因为 pure 的含义被那个不纯的函数所违背。

How is it possible that that being the case this code compiles?

因为引用是最终的。

关于java - 纯函数和 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41343645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com