问题标签 [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 - 我找不到任何关于我的功能不纯的东西
说真的,我正在绝望地寻找问题所在。这几天找不到答案!
React.StrictMode
API 导致我们setState
被调用两次,对吧?如果它产生错误,则意味着我们的setState
回调中的某个地方是不纯的。那么是哪一个呢?
在第一次调用时,
oldIssues
返回预期值,例如[{id: issue1}, {id: issue2}]
.newIssues
值例如[{id: issue3}]
但是在第二次调用时,
oldIssues
奇怪地变成了oldIssues
and的组合newIssues
。(第二次通话,oldIssues
已经[{id: issue1}, {id: issue2}, {id: issue3}]
)。使第二个
newOrganization.repository.issues.edges
值加倍newIssues
。[{id: issue1}, {id: issue2}, {id: issue3}, {id: issue3}]
完整的脚本可以在这里找到,第 101 行:https ://pastebin.com/ugsrBRTM
javascript - 调用纯函数的函数可以称为纯函数吗?
是否可以调用调用纯函数的函数可以称为纯函数?我如何理解“纯函数”是始终在相同输入上提供相同输出的函数。然后让我们对这个案例进行形象化。
我知道这可能看起来有点愚蠢,但让我感到困惑的是我所看到的纯函数示例。因为通常例子是这样的。
然后就像我们在最后一个代码中更改 c 一样,如果我们在第一个示例中更改 function1,那么 function2 也会有所不同。这个简单的事情让我很好奇如何严格定义“纯函数”。
- 编辑)
javascript - 如何以更优雅的方式验证这一点?
我试图在我的项目中做登录/注册模块。这是我的登录功能。我希望有一个函数可以为我验证所有事情,这样我就不必使用这么多“if”语句。我试图用纯函数做,但完全不知道该怎么做。有人能帮我吗 ?
dictionary - 在捕获每个中间结果的同时迭代地对值列表求和的更实用的方法是什么?
下面的代码按预期工作,但映射 lambda 不纯。我怎样才能重构它以使其纯净。(不需要坚持调用 map,我们可以在这里减少或其他任何东西,我只是希望它是纯的)
javascript - 持久数据、纯函数和 RAM
我目前正在阅读 Eloquent JavaScript,但我并不真正理解使用本段中指出的持久数据结构的兴趣。如果我猜对了,我们在这个例子中使用纯函数(方法?),因为该this.move
方法返回一个新VillageState
对象而不影响原始VillageState
.
这样,在问题解决之前创建的所有对象都存储在 RAM 堆栈的某个位置,对吗?那么,这些额外的数据存储是否也会减慢程序的速度?
在这种情况下,我真的不明白它可能比使用可变数据更容易理解。所以,如果你们中的一些人能为我澄清这一点,我会很高兴,谢谢。如果我在某个地方错了,请纠正我!
c - 纯函数与 const 函数的优化
我在这篇文章中使用的源代码也可以在这里找到:https ://gcc.godbolt.org/z/dGvxnv
鉴于此 C 源代码:
如果这是用 gcc with 编译的-O3
,我希望 的评估pure_f(a, b)
被移到if
. 但它没有完成:
另一方面,如果const_f
被调用而不是pure_f
,它被移动到if
:
为什么不将此优化应用于纯函数?据我了解,这也应该是可能的,而且似乎是有益的。
- 编辑 -
GCC 错误报告(见评论):https ://gcc.gnu.org/bugzilla/show_bug.cgi?id=97307
scala - 为什么闭包是 scala 或任何函数式编程语言的一部分
根据定义,闭包是
Scala 闭包是使用一个或多个自由变量的函数,该函数的返回值取决于这些变量。自由变量在闭包函数之外定义,不作为该函数的参数包含在内。
纯函数的定义是
纯函数是仅依赖于其声明的输入及其内部算法来产生其输出的函数。它不会从“外部世界”(函数范围之外的世界)读取任何其他值,也不会修改外部世界中的任何值。
当函数式编程完全是关于用纯函数编写代码时:如何在函数式编程中证明闭包之类的概念是合理的
请帮助清除理解
javascript - 在纯函数中使用像 Object.keys() 这样的全局函数会被合理地视为杂质吗?
我目前正在查看我的 React 项目,寻找可以将不纯函数转换为纯函数的地方,以减少副作用、更整洁和更易于理解的代码。
我相信/希望在可能的情况下转换为纯函数将实现这一目标。
我的问题是,在函数中使用 Object.keys() 会被视为杂质吗?
对象.keys()
我的想法是,虽然Object.keys()
它是一个不在范围内的函数getObjectKeys
,但它在 vanilla JS 中是全局的,因此它不会被视为杂质或需要添加到函数参数中以使函数纯净通过使用Dependency Injection
. 因此,当询问是否getObjectKeys
是纯函数时:
- 对于相同的输入,它是否输出相同 -> 是的。
- 修改任何外部变量或对象属性 -> 否
- 有没有副作用 -> 没有
你会认为 getObjectKeys 是一个纯函数吗?
pure-function - 关于纯函数中的“可测试结果”
里面有JavaScript
一个概念叫pure function
。它的一个特点是它总是返回一个testable result
. 我对此很困惑。我想知道它的定义和目标以及它的原因。
java - 纯函数可以存在于纯面向对象的编程语言中吗?
出于这个问题的目的,我所说的“纯面向对象编程语言”是指一种函数只能存在于(静态或非静态)对象内部的一种,即作为方法。
考虑以下 Java 代码:
在这个例子中:
- 是
Math.addExact
纯函数吗? - 是
Addends.sum
纯函数吗?
第一个问题的答案取决于方法如何被理解为与函数相关,即方法是被认为是函数的种类还是仅仅是它们最接近的 OOP 等价物。
第二个问题的答案取决于是否可以将其值注入对象的字段视为使用这些字段的关联方法的输入(假设纯函数是为相同输入提供相同输出的函数)。这么想的原因是认识到对于任何对象,尤其是那些表现出高内聚力n - m
的对象,通过要求其封闭对象通过注入值来实例化,将其中的任何 n 参数方法转换为参数方法是相当容易的m
,分配给m
不可变字段,放入m
该对象的 -parameter 构造函数中。
注意:我认识到这个问题的答案将部分是语义/约定的问题。我在问是否碰巧就这个问题达成了约定,如果有,它们是什么。
基于意见的问题结束后的澄清:如上所述,我不是在询问个人贡献者对这个问题的意见:我是在询问程序员和/或计算机科学家之间是否存在类似给出的示例,基于 a) 方法是否被视为函数,以及 b) 在纯函数的定义中如何广泛地解释“输入”;如果有收敛,它是什么。相比
- 基于意见:什么是道德?
- 不基于意见:维基百科如何定义道德?
- 争议:存在不可数集吗?
- 没有争议:在经典集合论中是否可以证明不可数集合的存在(是)?直觉主义集合论(否)呢?