问题标签 [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.

0 投票
6 回答
9721 浏览

javascript - 什么是 JavaScript 中不纯函数的示例

看过很多纯函数以及它们如何没有副作用之后,不纯函数的例子会是什么,它总是被反对为不稳定和主要的错误来源?

0 投票
1 回答
430 浏览

javascript - 如何单独测试纯函数调用树?

在我们的 JavaScript 开发团队中,我们采用了编写纯函数式代码的 redux/react 风格。然而,我们似乎在对我们的代码进行单元测试时遇到了麻烦。考虑以下示例:

此函数调用取决于对和的调用process,其中每个函数都可以调用其他函数。总之,它们可能需要一个非平凡的模拟 参数来构建测试。extractBarextractBazdata

如果我们接受制作这样一个模拟对象的必要性并在测试中实际这样做,我们很快就会发现我们有难以阅读和维护的测试用例。此外,它很可能会导致反复测试相同的东西,就像对 , 的单元测试一样processextractBar并且extractBaz可能也应该编写。通过 tofoo接口对这些函数实现的每个可能的边缘情况进行测试是很麻烦的。


我们想到了一些解决方案,但并不真正喜欢任何解决方案,因为它们看起来都不像我们以前见过的模式。

解决方案1:

解决方案2:

foo随着依赖函数调用数量的增加,解决方案 2 会很快污染方法签名。

解决方案3:

只需接受复杂的复合操作这一事实foo并对其进行整体测试即可。所有的缺点都适用。


请提出其他可能性。我想这是函数式编程社区必须以某种方式解决的问题。

0 投票
1 回答
67 浏览

redux - 基于当前状态或基于 reducer 内部定义的值创建值是否会使纯函数不纯?

我在redux-devtools 演练中阅读:

你的 reducer 必须是纯净的并且没有副作用才能与 DevTools 一起正常工作。例如,即使在 reducer 中生成随机 ID 也会使其变得不纯且不确定。相反,请在动作创建者中执行此操作。

这些话是关于生成随机值的。但是,如何根据当前状态获取唯一值?例如,在将数据存储到当前状态时,将数组的长度作为元素的 ID。只要我不删除数组的任何值,它就保证是唯一的。这会使函数不纯吗?

或者,通过基于当前状态创建条件值,如下所示:

或者,更极端的是,通过定义一个仅存在于函数内部的值,例如:

那么,这些例子是否使功能不纯?而且,如果不是,那么在 redux 中创建一个长而复杂的计算或重度嵌套的 reducer 是否是一种不好的做法,即使它仅从传递的值(状态和操作)中完成?

0 投票
0 回答
1219 浏览

javascript - 更喜欢纯函数而不是 React 组件?

我正在为一家法国公司开发 HTMl5 视频播放器。我们使用 React 和 Redux 来构建 UI,效果非常好,编写代码非常愉快!我们目前使用eslint-plugin-react来检查 React 代码风格。自上一个版本以来,linter 建议使用纯函数而不是 React 组件(查看规则),但这在我的团队中引发了一些争论。

我们已经将纯函数用于渲染总是相同的东西的非常小的组件(对于给定的道具)。没有问题。但是对于更大的组件,在我看来,纯函数似乎使代码不那么优雅(与其他组件相比也不那么统一)。

这是我们应该更改的组件之一的示例:

相对 :

我们喜欢 React 组件的结构。由于 ES7,PropTypes 和默认 props 可以在类中,这在纯函数中是不可能的。而且,特别是在这个例子中,我们有很多函数来渲染子组件。

如果我们不喜欢,我们可以简单地禁用此规则,但我们真的很想了解这一点,并且我们关心性能和 React 的良好实践。所以,也许你可以帮助我们。

你怎么能帮助我?关于这个有趣的问题,我会得到其他意见。支持纯函数的论据是什么?也许解决方案不是在纯函数中更改 ControlBar 组件,而只是对其进行改进。在这种情况下,您对此有何建议?

非常感谢你的帮助 !

0 投票
2 回答
2599 浏览

javascript - 有没有一种简单的方法可以用 Lodash 映射嵌套数据?

对于我当前的项目,我正在使用一个返回如下格式数据的 API:

我想创建一个纯函数, mapValues,它接受一个上述格式的对象,以及一个将每个对象映射name到 a的对象value,并返回相同的结构,但每个都point包含value对应于它的name.

例如,调用mapValues(data, { name1: "value1", name2: "value2", name3: "value3" })应该返回:

这是我的第一关:

这行得通,但是有相当多的嵌套重复代码。对于我的第二次尝试,我达到了递归。

这也有效,但它很难阅读而且不是很简洁。

有没有更简洁的方法来使用 Lodash 递归地映射对象?理想情况下,我正在寻找一种功能性方法。

0 投票
1 回答
715 浏览

javascript - 纯函数中的数组扩展运算符

在 Redux 教程中,他们大量使用数组扩展运算符来编写 reducer(必须是纯函数)。浏览以下脚本。

函数“pureFunc”是否是一个适当的纯函数。数组 d 上的突变反映在对象 n 中。

0 投票
1 回答
1541 浏览

javascript - 如何测试返回函数的函数?

这里我有一个函数generateBlocks,它接收一个数组blocks和一个函数onBlockClick。它返回一个对象数组,其中每个对象有两个属性labelonClick.

我无法测试它的返回值。这是测试用例:

我不能创建expectedas[[{label: "A", onClick: ()=>onBlockClick("A")},...]因为函数引用会有所不同。

那么如何重构 generateBlocks 函数以使其可测试呢?

0 投票
3 回答
2039 浏览

function - 纯函数可以调用外部函数吗?

纯函数可以调用外部方法吗?

例如:

可以jumpTwice()认为是一个pure function

0 投票
1 回答
583 浏览

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

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

例如:

可以calculate()认为是一个pure function

0 投票
2 回答
2255 浏览

javascript - React,纯函数警告?

我正在尝试通过实现一个简单的待办事项应用程序来学习反应和函数式编程。我没有使用通量,因为我只是想了解在父母和孩子之间传递信息的概念。我正在尝试在子项中的单击事件上触发父项中的函数。但是,我从 React 中得到了一个关于使用纯函数和状态的非常讨厌的错误。有人可以解释我做错了什么以及正确的做事方式吗?我的功能有什么不纯洁之处,我看不到我正在创造的副作用。这是我的代码:

非常感谢任何帮助/澄清!

这是错误:bundle.js:9139 警告:setState(...):在现有状态转换期间无法更新(例如在render或其他组件的构造函数内)。渲染方法应该是 props 和 state 的纯函数;构造函数副作用是一种反模式,但可以移至componentWillMount.