【问题标题】:Can a pure function use a private constant variable inside the same class?纯函数可以在同一个类中使用私有常量变量吗?
【发布时间】:2016-09-14 19:09:49
【问题描述】:

纯函数可以在同一个类中使用私有常量变量吗?

例如:

class TimesThousand {
  const CONSTANT = 1000;

  function calculate(number) {
    return number * CONSTANT;
  }
}

calculate() 可以被视为pure function吗?

【问题讨论】:

  • 这是什么语言?是的,正如所写,这是一个纯函数。
  • 感谢您的回答。只是一个粗略的代码
  • 您认为常量如何影响函数的纯度?也许不要称之为“纯洁”,而是“referentially transparent

标签: functional-programming pure-function


【解决方案1】:

当返回值仅由其输入值确定时,纯函数是纯函数,没有任何可观察到的副作用。

所以你的函数是纯粹的。由于CONSTANT 的值(顾名思义)是常量,因此输出完全由输入决定。

来自Wikipedia

如果以下关于函数的两个陈述都成立,则可以将函数视为纯函数:

  1. 在给定相同参数值的情况下,该函数始终评估相同的结果值。函数结果值不能依赖于在程序执行过程中或在程序的不同执行之间可能发生变化的任何隐藏信息或状态,也不能依赖于来自 I/O 设备的任何外部输入。
  2. 结果评估不会导致任何语义上可观察的副作用或输出,例如可变对象的突变或输出到 I/O 设备。

【讨论】:

  • 但第一条语句不成立,因为在两次“程序的不同执行”中,CONSTANT 可能持有不同的值。例如,APP_NAME 是一个常量,但可能会根据正在运行的程序实例而改变。我错过了什么吗?
  • CONSTANT 的值将如何变化?这是一个不可变的值,这意味着它永远不会改变。
  • @p0lska 更改常量的唯一方法是更改​​源代码,并且两个实例运行两个不同版本的应用程序。如果两个实例运行相同版本的应用程序,则它们无法返回不同的值。
  • 好吧,如果您更改源代码,我认为这是一个不同的函数,出于同样的原因,它也是纯粹的。我们不能指望函数在更改代码后是纯函数
猜你喜欢
  • 2014-03-06
  • 1970-01-01
  • 2012-05-01
  • 1970-01-01
  • 2019-08-26
  • 2010-10-03
  • 1970-01-01
  • 2019-08-28
  • 1970-01-01
相关资源
最近更新 更多