【问题标题】:ESLint rule for pure functions in Angular/typescriptAngular/typescript 中纯函数的 ESLint 规则
【发布时间】:2021-11-21 23:40:21
【问题描述】:

是否有任何 ESLint 规则仅用于在 typescript 中编写纯函数?我只想在我的代码中编写纯函数。有谁知道我们如何做到这一点?

提前致谢

【问题讨论】:

  • 我认为 ESLint 还不够先进,无法判断哪些函数是纯函数,哪些不是。
  • @VLAZ 从技术上讲,你可以做一些事情,比如不允许在函数内部使用this(假设你是并且不应该使用全局变量),并且没有变量是未在函数参数上定义
  • @distante 是的。 a rule somebody made 但它是被禁止的东西的集合。作者还建议谨慎使用。它仍然不能确保函数是纯的。例如,调用console.log() 是不纯的,规则不会阻止它。如果不是,那么alert。如果不是,那么Math.random()。等等等等。它不会确保完全的纯度。
  • @VLAZ 我的意思是,pure 并不意味着重新实现语言特定的功能,但我明白你的观点和我评论中的缺陷。
  • @distante 不,我不是这个意思,因为这些必须重新实现。我的意思是这些是不纯的操作,在函数中使用一个会使函数不纯。但是没有真正的方法可以禁止使用它们。也没有用。这些也可以用于其他纯粹的应用程序而不会“妥协”。总纯度适合无聊的应用。即使是纯粹的功能性应用程序也希望使用用户数据或将某些内容输出到屏幕上,甚至可能有一些(伪)非确定性。纯操作可以控制杂质。

标签: javascript angular typescript eslint tslint


【解决方案1】:

纯度分析相当于解决停机问题,因此在一般情况下不能静态完成。总会有无数个函数,您的纯度检查器既不能证明它们是纯的,也不能证明它们是不纯的。

这意味着任何可能的纯度检查器只能做以下两件事之一:

  • 谨慎行事,拒绝任何无法肯定地证明它是纯函数的函数。这意味着纯度检查器不允许您编写无限多的纯函数。
  • 接受它不能肯定地证明它不纯的任何函数。这意味着纯度检查器将允许您编写无限多的不纯函数。

真正做到这一点的正确方法是将语言、类型系统和库从头开始设计为 100% 纯。然后,只有到那时,您才有机会以明智的方式自动检查纯度。当然,在一般情况下仍然无法检查,但是将语言、类型系统和库设计为易于检查有助于使检查器更加有用。

最简单的情况是设计一种语言,一开始就不允许您编写不纯的函数,但这样的语言不会非常有用。正如 Haskell 的一位设计者所说:纯程序所能做的就是让 CPU 变热。观众中有人回应:让 CPU 变热实际上也是一种副作用!

【讨论】:

  • 可达性分析也等价于解决停机问题,但编译器会定期执行此操作以拒绝可证明不可访问的代码(并检查函数中的每个路径是否到达 return 语句) .如果一个工具可以在几乎所有实际情况下检测到某种错误,那么它将会很有用,即使在所有种情况下检测到这种错误的工具在理论上是不可能的。
猜你喜欢
  • 2021-06-08
  • 2021-04-14
  • 2019-11-10
  • 1970-01-01
  • 2021-07-21
  • 2020-10-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-05
相关资源
最近更新 更多