编程模式之生成器模式

这是一个系列贴,以后都会分享一些编程的技巧,以及思路

编程模式是不分语言的,他是一种思想,思路,更高级的抽象,适用于所有图灵完备的语言

上一帖子 编程模式之迭代器模式

什么是生成器?

在每次计算后并且生成所需要的值,这个整体就可以称之为生成器

其实生成器并不高大上神秘莫测,每个开发者也都用过生成器,一个最简单的生成器

for (int i = 0;  i < 5; i++)

每次循环的时候的时候就会生成一个小于5大于0的数1 2 3 4 5

所以这里的生成器就是int = 0; i < 5; i++

是不是很简单?

这里满足了生成器的条件,计算后才生成所需要的值。要重点关注这个计算后这个关键词

通过的不断的推算来进行求值,第一次是0, 然后满足条件之后再进行推算然后得到1,再进行推算然后得到2,最后得到4。

所以只要满足可以惰性求值的操作,就可以称之为生成器

js的生成器

js有很多语法糖来快速的制造一个生成器

看看以下代码

image.png

这里就是js的一个无限长的偶数生成器,可以生成无限长的偶数

这里的function*的声明就是在说,这里这个函数是一个生成器,然后使用yield返回计算后的偶数

function*调用后不会马上得到结果,而是返回一个迭代器,这个迭代器的值就是生成器生成的值

结语

根据以上例子可以得出,生成器跟迭代器两个模式是不分家的,生成器通常都会伴随着迭代器,迭代器一般都需要一个生成器去生成值


本期篇幅有些短,但是因为是把生成器和迭代器两个拆分出来讲的,生成器和迭代器本身就是一种很简单但是很强大的编程模式以及编程思想,精炼且强大

下一篇,讲讲装饰器编程模式😋