Для функциональной разработки

В функциональном программировании частенько нужно отладить цепочку map() вызовов. Чтобы не писать console.log внутри функции, можно внедрить функцию trace в цепочку вызовов. Пример такой функции:

const trace = tag => target => (console.log(tag, target), target);

Пример использования

Возьмем для примера функции crypt и decrypt, про которые недавно я писал.

Чтобы понять что происходит на каждом шаге, мы можем внедрить нашу функцию trace между вызовами:

const encrypt = (str, key) => str
.split('')
.map(trace('after split'))
.map(s=>(s.charCodeAt()^key).toString(16))
.map(trace('after XOR transformation'))
.join('g')
;
const decrypt = (str, key) => str
.split('g')
.filter(Boolean)
.map(trace('after filter'))
.map(s=> String.fromCharCode(parseInt(s,16)^key) )
.map(trace('after decode'))
.join('')
;