Хранение значений в стиле функционального программирования - PullRequest
1 голос
/ 18 апреля 2019

У меня есть файл readstream, дающий мне значения, которые мне нужно накапливать в функции, которая должна возвращать значение.

PSEUDOCODE:

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 голосов
/ 18 апреля 2019

Избегайте мутаций, вместо этого верните новое состояние. Производить вывод, основываясь только на вводе, но не на глобальных / закрытых объектах (или, по крайней мере, не на изменяемых закрытых объектах).

Возможная реализация вашего примера на FP:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...