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ć…