问题标签 [pure-function]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 高阶函数返回纯函数
下面是一个名为 functionA 的高阶函数示例,它以 customValue 作为输入并返回一个函数,该函数获取输入并使用自定义值来详细说明结果:
以下是一些结果:
functionA 返回的函数可以认为是纯函数吗?
更新:上面的例子只使用数字输入。正如@CRice 所描述的,只有当 customValue 是常量并且没有内部状态(如类)时,才可以将返回的函数视为纯函数。
scala - 将不纯函数转换为纯函数改进 - Scala
我目前的设计是我将有一个服务类,负责通过外部 API 获取一些信息。现在我明白了,不可能有 100% 纯函数。
我的问题:处理需要在 Scala/FP 中连接到外部 API 的情况的最佳方法是什么?目的是通过最小化不纯函数来拥有最合适的“函数式编程风格”
目前,我将所有 API 调用封装在 IO 对象中。这够合适吗?我看到了单子的例子。在这种情况下我应该合并一个单子风格吗?
python - 在列表理解中调用非纯函数
我有以下代码(简化):
如您所见,send_issues
和send_issue
是非纯函数。这是否被认为是在列表理解中调用非纯函数的好习惯(和 Pythonic)?我想这样做的原因是这很方便。反对这一点的原因是,当您看到列表推导式时,您希望此代码仅生成列表,仅此而已,但事实并非如此。
UPD:我实际上想创建并返回与这个问题相反的列表。
c++ - 限定为 __attribute__((pure)) 或 __attribute__((const)) 的 C++ 类构造函数
__attribute__((pure))
如果 C++ 类构造函数只能通过其参数访问数据,那么它们是否可以并且应该被声明?在哪些情况下他们应该被认定为__attribute__((const))
?
javascript - redux reducer 可以在几乎是另一个副本的状态下设置 2 个键吗
我有一个 redux 减速器,如下所示:
如果 s1 是一个嵌套对象数组 - 那么 s2 内部的一些深度引用也将指向内存中的同一个对象。
减速器返回修改状态是否可以 - 其中 2 个键几乎指向同一个对象?它是否使减速器不纯并且整体代码功能不正确?
javascript - 纯函数可以使用 `this` 改变其容器类中的其他属性吗?
我知道纯函数不应该改变未作为参数传入的状态,但我不知道this
关键字是否是该规则的例外。这是我在想的一个简单示例:
这是不纯的吗?为什么或者为什么不?
compilation - 纯 D 函数在运行时计算(不是编译时)
我很好奇:如果有纯D函数,可以在编译时计算。
如果我不想在编译时计算纯函数,而是在运行时计算,怎么办?
例子:
f
是一个纯函数,我希望它在运行时计算。
javascript - 使用闭包来净化一个通过递归构建对象的函数——JavaScript
我创建了一个基于 promise 的函数,它爬上一个层次结构,直到它到达顶部,并使用包含该结构的对象进行解析。我对代码的唯一抱怨是我修改了函数体之外的变量,这意味着它不是纯函数。我研究过 JavaScript 闭包,并且完全掌握了它们的琐碎用途。但是我正在努力弄清楚它们如何/是否可以帮助使我的功能变得纯粹。到目前为止,我尝试关闭的只是覆盖了变量,没有修改它们。这是使用全局变量的代码:
非常感谢您对此事的任何意见。
design-patterns - 函数式编程:如何在没有臃肿函数的情况下处理复杂数据?
假设在您的程序中您定义了一个复杂的汽车对象。该对象包含一个很长的预定义键值对列表(wheels
、engine
、color
、等),每个键值对要么是部件号lights
,amountDoors
要么是部件号列表,或者是特定值。
我们还假设,这个对象已经尽可能简单,不能进一步简化。
此外,我们还有一个设置列表,它告诉我们有关零件编号的更多信息,并且每种零件都不同。对于引擎,它可能如下所示:
所有设置都捆绑在一个主设置对象中
现在我们有不同的函数,它们应该接受 aCar
并返回关于它的某些值,比如重量、价格或螺丝数量。
要计算这些值,需要将输入汽车的 ID 与设置中的 ID 进行匹配,并应用一些逻辑来获取复杂零件的准确数据(要弄清楚车身的样子,我们需要看看有多少有门,轮子有多大等)。
对于汽车的每个部分,获取价格也会不同且任意复杂。定价的每个部分都可能需要访问有关汽车的不同零件和信息,因此仅映射零件列表是不够的。(对于油漆工作的价格,我们需要所有具有相同颜色的零件的总表面积等。)
一个想法是创建一个中间对象,它已经解决了在价格和重量计算之间共享的有关汽车的所有细节,然后可用于计算重量、价格等。
一种实现可能如下所示:
这样,部分工作只需完成一次。但在这个例子中detailedCar
,它是一个比初始输入对象更复杂的对象,因此参数也将是getPriceCar
- 使得它也很难测试,因为我们总是需要一个完整的汽车对象用于每个测试用例。所以我不确定这是否是一个好方法。
问题
对于处理无法以函数式编程风格/纯函数/组合进一步简化的复杂输入数据的程序来说,什么是好的设计模式?
给定一个复杂的、相互依赖的输入,结果如何容易进行单元测试?
javascript - 纯函数:“无副作用”是否意味着“总是相同的输出,给定相同的输入”?
定义函数的两个条件pure
如下:
- 没有副作用(即只允许更改本地范围)
- 给定相同的输入,总是返回相同的输出
如果第一个条件始终为真,是否有任何时候第二个条件不为真?
即它真的只需要第一个条件吗?