问题标签 [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.
java - 如何在 Java 函数式编程中容纳 System.out.println()?
我想使用 System.out.println() 向用户询问输入。比如 System.out.println("Enter name")。但是,这会产生副作用。有没有办法绕过它?
javascript - 如何将 API 响应插入 HTML
我使用纯函数为多个 HTML 元素创建包装器,但不明白如何将 JSON 响应 API 数据插入其中。您能否帮助创建一个将 API 数据插入 HTML 之类的纯函数(如文本)或使用具有属性“innerText”的名为“create”的现有函数。
我发现了类似的问题:Using Javascript loop to create multiple HTML elements
接口:
将 API 数据转换为可读格式的函数:
转换后仅将 API 数据呈现为 HTML 的异步函数:
渲染后预期:
预期为 HTML:
那确实渲染功能:
javascript - 在元素上发生事件和从 dom 中的元素发出事件有什么区别?
我想了解当我单击一个 dom 元素时,该元素上会发生单击事件并调用相关的事件处理函数。这是一个异步函数的基本示例。我的问题与这背后的实现有关。当我们单击用户屏幕上的任何 dom 元素时,会发生单击事件。在元素上发生事件和逐个元素发出事件之间有什么区别?发生和发射是一样的吗?如果不是,那有什么区别?
另外当我们注册一个回调函数时,它们在内存中存储在哪里?我不是在这里询问事件循环(主堆栈和回调队列)。
事件对象是如何创建的以及是谁创建的?事件如何映射到关联的回调函数?
functional-programming - 当我们谈论函数中的函数时,究竟什么是纯函数
我了解到纯函数是一个不会改变全局状态的函数。如果这是真的,函数内的函数可以改变外部函数的状态并且仍然是纯的,对吗?
例子:
在上面的例子中,func2
仍然是纯的,因为它不使用任何全局状态。
这就是我的看法,但我的工作同事认为这func2
并不纯粹,应该这样写:
这很糟糕,因为:
- 如果 v8 没有对此进行优化,CPU 将运行更多指令
- 阴影是一种不好的做法
问题是:当我们谈论函数中的函数时,纯函数到底是什么?
javascript - 将数组传递给 React 无状态组件
按照 Learn ReactJS 一书中的示例,我尝试以相同方式传递数组只会产生错误。
来自作者的 Github 示例:https ://github.com/MoonHighway/learning-react/blob/master/chapter-04/03-react-components/04-components.html
我用 建立了一个 React 应用程序create-react-app
,并在 App.js 中编写了以下内容:
在 index.js 中,我将 ReactDom.render 设置为:
我收到一个错误“things.map 不是函数”。当我删除解构的things
( const App = () => ...
) 时,我的组件工作了。
我的问题是: 1. 当两者都被声明并且可能不在同一范围内时,如何things
被拉入 App() ,并且没有专门传递给函数?2. 如果我做了一些不同的事情,示例代码对我有用吗?const
things
谢谢!
class - 更改在具有纯函数的类的构造函数中定义的变量
我有一个 ES6 Singleton 模式类,它的构造函数有一个名为name
in 的变量。
import
此类在另一个具有语法的类模块中使用。
据我所知,通过使用这种方式,我们会对setName
函数产生副作用,因为它会修改超出其范围的变量的值。因此,setName
虽然不是纯函数。
我们有任何解决方案可以更改setName
为纯函数吗?
javascript - 这不是纯函数吗?
我正在学习 Web 开发的状态管理,并遇到了这个带有纯功能的 redux 教程,如下所示。然而声明:“action.todo.id = state.todos.length + 1;” 让我怀疑这个纯函数是……不纯的。请赐教,谢谢!
random - 哪个假随机函数生成最看似 0 到 1 之间的随机数?
我能找到的大多数随机函数是一个序列函数,它将最后生成的结果作为下一次调用的种子
我想要一个可以自行运行的纯函数,并且可以给出看似随机的序列,给定从开始到结束的任何数字和一个种子
老实说,我想要一种算法来并行生成随机数(并且可以在 GPU 中使用),仅在开始时使用随机种子并将每个元素的索引作为输入
也许我可以使用哈希函数,但我想知道哪种算法可以给出最可能的均匀分布,并且在给定任何种子和任何长度的情况下总是看似随机的
编辑:谢谢你的所有建议。我对我想要的东西有一个更明确的想法,我可以解释
我不需要太多的雪崩属性,但我更关心均匀分布。并且要使其并行,它必须是无状态算法,因此大多数 PRNG 都不适合
但最不担心的是安全性。我想要一个看似随机的人类感知序列,但不要在任何安全性中使用它,仅用于视觉和界面
如果它是一个非常快的算法,将更加感激
reactjs - React reducer 必须是纯函数吗?
我写了一个 UI 元素作为一个函数组件,它使用 React 的userReducer
钩子,它似乎运行没有错误。
useReducer
引用我写的一个函数(想象地称为reducer
):
有state
reducer函数输入输出的数据;并且有一些“托管”的 UI 元素取决于state
...
……这很正常。
我担心的是该reducer
功能不纯。
- 它的行为仅取决于它的输入参数——因此使用相同的输入参数调用它两次具有相同的结果。
- 但是它会产生副作用,它不仅返回新状态
副作用是有一个<input>
元素的状态由以下之一控制:
该<input>
控件只是半托管的,如下所示:
onKeyDown
和事件是分派给reducer的onChange
动作(这很好),但是reducer将HTMLInputElement
实例(即inputRef.current
值)作为输入参数传递,reducer设置它的属性HTMLInputElement
来改变它的状态——而不是<input>
存在一个完全托管的组件,其内容由 reducer 输出的状态定义。
<input>
元素不是完全管理的原因是我需要控制选择范围(即start
和end
),<input>
而不仅仅是它的文本值。
问题:
- 以这种方式不纯的 reducer 函数是否可以(例如,尽管存在问题或显着但没有错误)?
- 它仅取决于其输入参数,因此是可重复的
- 但它会改变某些东西(即
inputRef.current
属性)并返回新state
值
- 减速器是否有另一种方法来控制元素的
start
和end
属性<input type="text">
,例如,一种定义<input>
元素的方法,使其start
和end
值state
由减速器返回的他控制?
(我认为@Fyodor 下面的回答回答了第二个问题,我仍然不确定第一个问题)。
什么决定了要在 HTML 元素上设置的值?传入的使用信息是否包含逻辑?
组件的设计和源代码显示在这里,而且相当长。
它是一个复杂的“组件”,它使用几个元素来实现——几个<div>
s、几个<span>
s、一些可点击<svg>
的 s 和<input>
元素。
给出了减速器,作为它的输入参数:
- 之前的“状态”
- 当前
<input>
实例(它可以从中读取 的当前状态<input>
) - 由事件处理程序创建的“动作”
几个事件处理程序或动作中的两个是onKeyDown
和的onChange
事件,<input>
因此<input>
当有一个事件改变<input>
.
functional-programming - 副作用:修改局部变量是外部影响还是内部影响?
我正在学习函数式编程中的副作用。我知道外部效应是在函数之外可以观察到的效应,而内部效应是从外部看不到的。我想知道修改局部变量是外部影响还是内部影响。
由于局部变量只能在函数内部访问,而对外界不可见,我认为修改局部变量是内部效应的一个例子,因为它对外界是不可观察的。
但是,我不确定我的推理是否正确。任何见解都值得赞赏。