问题是:
- 生成器是否破坏了功能编程范式?为什么或者为什么不?
- 如果可以,可以在函数式编程中使用生成器吗?如何使用?
考虑以下:
function * downCounter(maxValue) {
yield maxValue;
yield * downCounter(maxValue > 0 ? maxValue - 1 : 0);
}
let counter = downCounter(26);
counter.next().value; // 26
counter.next().value; // 25
// ...etc
该downCounter
方法显示为无状态。同样,downCounter
使用相同的输入进行调用将始终导致相同的输出。但是,同时,调用next()
不会产生一致的结果。
我不确定生成器是否会破坏函数式编程范式,因为在此示例中counter
是生成器对象,因此调用next()
将产生与使用完全相同的另一个生成器对象产生的结果相同的结果maxValue
。
同样,调用someCollection[3]
数组将始终返回第四个元素。同样,next()
在生成器对象上调用四次也会始终返回第四个元素。
为了获得更多的上下文,在编写kata编程时提出了这些问题。回答问题的人提出了一个问题,即生成器是否可以在函数式编程中使用以及它们是否保持状态。