在JavaScript中警告副作用的任何短信?

Ruf*_*fus 6 javascript functional-programming eslint

凭借JavaScript的灵活性,我们可以编写充满副作用的代码,或者仅仅是纯函数.

我一直对功能JavaScript感兴趣,并希望在这个范例中启动一个项目.关于这一点的麻烦肯定能帮助我收集好的做法.有没有任何一点可以强制实现纯功能和副作用的自由风格?

Jör*_*tag 2

纯度分析相当于解决停机问题,因此在一般情况下,任何可以确定代码是否纯净的静态分析都是不可能的。总是存在无限多个程序,无法确定它们是否是纯粹的;其中一些程序是纯净的,一些是不纯净的。

现在,您故意使用术语“linter”而不是静态分析器(当然,linter 只是静态分析器),这似乎意味着您可以接受近似的启发式结果。您可以拥有一个 linter,它有时会告诉您您的代码是纯净的,有时会告诉您您的代码是不纯净的,而大多数时候会告诉您它无法决定您的代码是纯净的还是不纯净的。您可以拥有一个已知是纯操作的白名单(例如,Number使用运算符添加两个 s +),以及一个已知不纯操作的黑名单(例如,任何可能引发异常的操作、任何类型的循环、if语句) ,Array.prototype.forEach)并对这些进行启发式扫描。

但最终,结果将太不可靠,无法对它们进行任何认真的处理。

  • @jJ':在 Ruby、Scala、Smalltalk、Self、Newspeak、Io、Ioke、Seph、Lisp、Scheme、Fancy、Haskell 等语言中,其中“if”是一个表达式,是的。但在 ECMAScript 中则不然:在 ECMAScript 中,`if` 是一个语句,没有任何值。时期。如果 ECMAScript 中的“if”没有副作用,那么它根本没有效果。条件运算符 OTOH *是*一个表达式,并且*有*一个值。 (2认同)