0 Tage Serie
javascript / expert
Snippet

Funktionale Kombinatoren für Point-Free Middleware-Pipelines

Funktionale Kombinatoren wie 'pipe', 'tap' und 'alt' ermöglichen Point-Free-Programmierung, bei der Logik zusammengesetzt wird, ohne die Daten, auf denen sie operiert, explizit zu benennen. Dies führt zu hochgradig modularen, testbaren und wiederverwendbaren Middleware-Mustern in Next.js API-Routes oder Datenverarbeitungsschichten, wobei Transformation gegenüber Zustandsmutation betont wird.

snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
const pipe = (...fns) => (x) => fns.reduce((v, f) => f(v), x);
const tap = (fn) => (x) => { fn(x); return x; };
const alt = (fn, fallback) => (x) => fn(x) ?? fallback;
const processRequest = pipe(
tap(req => console.log(`Processing ${req.url}`)),
(req) => ({ ...req, timestamp: Date.now() }),
alt(req => req.user, 'anonymous')
);
const result = processRequest({ url: '/api/data' });
nextjs
Erklärung
1
const pipe = (...fns) => (x) => fns.reduce((v, f) => f(v), x);
Eine Funktion höherer Ordnung, die mehrere Funktionen zu einer sequentiellen Pipeline zusammensetzt.
2
const tap = (fn) => (x) => { fn(x); return x; };
Führt einen Seiteneffekt aus (wie Logging) und gibt den ursprünglichen Wert unverändert zurück, um den Pipeline-Fluss zu erhalten.
3
const alt = (fn, fallback) => (x) => fn(x) ?? fallback;
Bietet einen logischen Fallback-Mechanismus mittels Nullish Coalescing innerhalb einer funktionalen Kette.