为什么发电机不能很好地运转?

时间:2017-01-31 13:28:42

标签: javascript eslint airbnb

我们正在关注airbnb对象指南,并在其中说他们建议不要使用generators

  
      
  • 11.2暂时不要使用发电机。

         

    为什么呢?它们不适合ES5。

  •   

我似乎无法找到任何解释,因为它们的意思不好(不仅仅是在本文档中,而是在Google上)。我们正在使用babel,并且有polyfill来做到这一点。有什么我想念的吗?

1 个答案:

答案 0 :(得分:3)

他们完全错了(或者文档严重过时)。 Transpilers从生成器和异步函数创建基于闭包的状态机。他们不好,但工作得很快。唯一的缺点是它更难调试(即使使用源映射)。

另一方面,在某些情况下,不使用生成器会导致难以处理的变通方法,其中生成器将提供干净的解决方案。始终首先编写代码以便清晰。

修改

我们的开发人员在现实生活中学到了一些编程挑战最好用状态机来解决。生成器和异步函数为您提供了一个强大的工具来表达大多数状态机。

这就是语言的演变方式:我们发现了一个反复出现的编程问题,它有一个解决方案,所以人们用新的语法创建一种新的编程语言,以便为这个问题提供更短的解决方案。这就是我们如何获得基本数据结构,函数,闭包,类,一流函数,GC,RTTI,反射等等......今天,您可以选择使用哪种语言进行项目。您可以直接编写机器代码,也可以使用某种高级托管语言。这个论点通常是关于执行速度(汇编应该更快吧?),portabiliy,以及使用语言语法的学习曲线(为什么我要学习lambdas和yield以及async / await我何时能够在不使用任何问题的情况下解决任何问题?)。我个人更喜欢使用富有表现力的语言,我相信高级/托管程序永远不会比原生程序慢。

因此,让我强调一下你不使用生成器会失去什么:你最终会编写相同的百行状态机(可能伪装成一组对象和函数),这些机器可以通过一个简单的程序使用一个合理的和熟悉的语法。