我发现有人在某个技术组中讨论JavaScript的生成器。许多人提到发电机将与异步相关。我认为这是一种深刻的误解。
发电机与异步之间的关系是什么?由CO代表的一批早期框架使用它来模拟异步/等待,但是这种表明生成器与异步有关吗?我认为答案是否的。CO中使用了许多语言特征,如果功能,变量...和生成器只是其中之一。
发电机确实是模拟异步/等待的关键语言特征。但是,正确的因果关系是生成器和异步/等待JS的基础设施:该功能暂停并保留了当时的执行环境。
在我的概念中,发电机的应用程序前景比异步/等待。产物代表“无限序列”的抽象,或者长序列的抽象,这种抽象可以为我们带来编程思想的突破。
在非常前卫 - garde功能语言的官方网站的主页上,有这样的代码:
这是为Haskell程序员感到自豪的代码。它的作用是生成定性数序列。在大多数语言中,很难重新制定这种逻辑结构。在它们中,最关键的点是它应用了延迟计算和无限列表的概念。
我们尝试分析此Haskell代码的逻辑,表明整数序列从2到无限开始。FilterPrime是一个过滤此整数序列的函数,该函数的功能由后者指定。因此,可以将整数序列转换为质量数序列的密钥代码是FelterPrime,那么它到底是什么?
此代码很短。首先,让我们看一下参数部分。P:XS是解构和分配的形式参数。它表明输入列表中的第一个元素分配给p,其余部分,并且值为xs。
第一次调用FilterPrime。目前,P的值为2,而XS是无尽的列表。
那么,FilterPrime Filter P和XS如何列入质量数字列表?让我们看一下此代码:
可以用适合JS程序员理解的伪代码来解释这种近似含义:
它是P的倍数。从列表xs.of课程中,XS不是JavaScript的本机数组,因此它没有方便的过滤器方法。
然后,接下来,此过滤器数组将传递给FilterPrime递归。这很有趣。目前,P的多个在X中过滤掉了。Filter的第一个元素的倍数,您可以继续找到下一个质量。
最后,代码指示列表中P的第一个。
因此,在JavaScript中,我可以重新阐述此类编程想法吗?
答案当然是,关键是生成器。
首先,我们要解决的问题是这是一个无尽的列表。JavaScript不支持无数列表,但是我们可以使用Generator表示代码如下:
接下来,阵列的过滤器不能在无尽的列表上表现良好,因此我们需要无尽列表的过滤器功能。代码如下:
最后,只要您阅读Haskell,我们的精彩效果弹片就不困难,实现代码如下:
代码是编写的,我们可以在JavaScript中使用唯一的异步能力来输出此质量序列:
好吧,尽管语法噪声有点有点,但到目前为止,我们已经达到了与Haskell相同的质量序列算法。
除了无尽的列表外,生成器还适合包装一些API来表达“不规则列表”的概念。例如,我们可以在正则表达式中制作某些EXEC包,以使其成为生成器。
使用时,我们可以用于...结构。以下代码显示一个简单的单词分析写作。
这种API设计比原始设计更简洁和美丽吗?
您会发现发电机是如此巨大潜力的语言特征。它为Javascripter打开了“无尽”数学概念的大门。因此,不要考虑使用它来模拟异步。我希望阅读这篇文章。您可以获得一点灵感。使用发电机在生产中设计开源项目或API。谢谢您的观看。
