静态方法是否接近纯方法?
Are static methods close to pure methods?
按照纯方法(一种对外界没有副作用的方法)的要求,我发现大多数时候静态方法都满足这个要求。我们不能在静态方法中访问实例变量,因此它大大减少了产生副作用的机会。然后大多数情况下,我们使用静态方法根据输入值和 return 新值进行一些计算...输入很少发生变化。
那么可以说静态方法足以替代纯方法吗
没有。只是静态并不能使函数变得纯粹。
在纯函数式编程中,函数的结果应该只取决于它们的参数,而不考虑全局状态。静态函数可以轻松访问和修改全局状态。
任何有用的纯函数都必须return一个值。静态函数可以而且经常被声明为 void,这对于纯函数来说毫无意义。
对于相同的输入,纯函数应该每次都产生相同的结果。任何使用静态计数器的静态函数都可能违反该规则。
例如,在 Java 中,流对象本质上是函数式的。它们的函数,例如 filter() ,不是静态的,而是通过产生新流而不是修改原始流对象来保持流数据的不变性。
也就是说,静态函数更容易没有副作用,因为它们少了一件需要担心修改的事情——它们自己的实例状态。实例函数需要避免修改它们自己的实例状态和全局静态状态。
按照纯方法(一种对外界没有副作用的方法)的要求,我发现大多数时候静态方法都满足这个要求。我们不能在静态方法中访问实例变量,因此它大大减少了产生副作用的机会。然后大多数情况下,我们使用静态方法根据输入值和 return 新值进行一些计算...输入很少发生变化。
那么可以说静态方法足以替代纯方法吗
没有。只是静态并不能使函数变得纯粹。
在纯函数式编程中,函数的结果应该只取决于它们的参数,而不考虑全局状态。静态函数可以轻松访问和修改全局状态。
任何有用的纯函数都必须return一个值。静态函数可以而且经常被声明为 void,这对于纯函数来说毫无意义。
对于相同的输入,纯函数应该每次都产生相同的结果。任何使用静态计数器的静态函数都可能违反该规则。
例如,在 Java 中,流对象本质上是函数式的。它们的函数,例如 filter() ,不是静态的,而是通过产生新流而不是修改原始流对象来保持流数据的不变性。
也就是说,静态函数更容易没有副作用,因为它们少了一件需要担心修改的事情——它们自己的实例状态。实例函数需要避免修改它们自己的实例状态和全局静态状态。