以函数式编程风格存储值

时间:2019-04-18 15:30:00

标签: javascript functional-programming

我有一个文件读取流,为我提供了我需要在一个需要返回值的函数中累积的值。

伪代码:

data = [];

process(item){
 data.push(item);
 data.length > 2 && data.shift();
 if data[0] == 'ok'.. 
   return data[1];
 else 
   return something else
}

stream(item){
 process(item);
}

现在这将充满副作用和不良做法。 我根本不知道如何将其转换为FP ...

只是练习。请。

1 个答案:

答案 0 :(得分:-1)

避免突变,而是返回新状态。 仅根据输入产生输出,而不基于全局/封闭对象(或至少不基于可变封闭对象)产生输出。

示例的可能的FP-ish实现:

function process(item, oldData) {

 const data = [...oldData];
 data.push(item);
 data.length > 2 && data.shift();
 if(data[0] == 'ok') {
   return {
        result: data[1],
      interimData: data
   };
 }
 else {
    return {
       result: return something else,
      interimData: data
   };
 }
}

function stream(item, data){
 return process(item, data);
}

var data = [];
data = stream(item1 , data).interimData;
data = stream(item2 , data).interimData;
...
const finalResult = stream(item3 , data);