Poznajemy kolejną koncepcję programowania funkcyjnego – pipe. Tworzymy funkcję pipe za pomocą funkcji reduce. Do dzieła.

Oto nasz przykład:

let url = "/blabla/bla?q=term";

const removeFirstlSlash = (url) => url.startsWith("/") ? url.slice(1) : url;

const removeQueryString = (url) => url.includes("?") ? url.slice(0, url.indexOf("?")) : url;

Sprawdźmy, jak to działa:

url = removeFirstlSlash(url);
url = removeQueryString(url);

console.log(url);
//blabla/bla

url = removeFirstlSlash(url);
url = removeQueryString(url);

console.log(url);
//blabla/bla

Jak widać, bez zarzutu. Teraz trzeba się trochę nagłowić jak zrobić funkcję pipe. Z reduce to bardzo łatwe:

const removeFirstlSlash = (url) => url.startsWith("/") ? url.slice(1) : url;

const removeQueryString = (url) => url.includes("?") ? url.slice(0, url.indexOf("?")) : url;

const pipe = (...fns) => (data) => fns.reduce((acc, fun) => fun(acc), data);

const stripUnwantedParts = pipe(
    removeFirstlSlash,
    removeQueryString
);

let url = stripUnwantedParts("/blabla/bla?q=term");

console.log(url);
//blabla/bla

Paradygmat funkcyjny będziemy jeszcze zgłębiać…