Attualmente sto imparando la programmazione funzionale e sto cercando di imparare un nuovo concetto: i trasduttori.
In realtà sto ottenendo il punto di vista teorico, come se fosse una mappa / riduzione avanzata che mira a fornire una migliore complessità temporale su operazioni su array / oggetto (come trasformare / filtro / ridurre).
Ecco il mio codice attuale, mi sento un po 'strano a riguardo. Non riesco a capire cosa c'è che non va, ma non è un trasduttore per me (odore di codice?)
Puoi aiutarmi a capire il concetto o come regolare questo frammento di codice per creare un trasduttore "reale"?
const assert = require("assert");
const numbers = [1, 2, 10, 23, 238];
const createFilter = predicate => element => predicate(element);
const createMapper = transform => element => transform(element);
const reducer = (state, element) => state.concat(element);
const isEven = createFilter(i => i % 2 === 0);
const double = createMapper(i => i * 2);
const createTransducer = (map, filter, reducer) => (acc, current) =>
filter(current) ? reducer(acc, map(current)) : acc;
const transducer = createTransducer(double, isEven, reducer);
/* Testing part */
const expectedResult = [4, 20, 476];
assert.deepEqual(numbers.reduce(transducer, []), expectedResult);
console.log("All test passed :D");