javascript / expert
Snippet
Variadische Curry-Implementierung mit Argument-Platzhalter-Auflösung
Fortgeschrittene funktionale Programmierung in JavaScript nutzt Currying mit Platzhalter-Symbolen, um eine flexible, reihenfolgeunabhängige partielle Argumentanwendung zu ermöglichen. Durch die Nachverfolgung von Positions-Platzhaltersymbolen (Symbol) und das dynamische Ausfüllen fehlender Argumente über Aufrufebenen hinweg verzögern höhere Funktionen die Ausführung, bis die geforderte Stelligkeitsgrenze erreicht ist.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
const _ = Symbol('curry.placeholder');function curry(fn, arity = fn.length) {return function curried(...args) {return function(...nextArgs) {const combined = args.map(arg => (arg === _ && nextArgs.length ? nextArgs.shift() : arg)).concat(nextArgs);const filledCount = combined.filter(arg => arg !== _).length;return filledCount >= arity ? fn(...combined) : curried(...combined);};};}const divide = (a, b, c) => (a / b) + c;const curriedDivide = curry(divide)();const divideTenBy = curriedDivide(10, _, 2);console.log(divideTenBy(5));
nodejs
Erklärung
1
const _ = Symbol('curry.placeholder');
Erstellt ein eindeutiges Symbol-Token als Positionsargument-Platzhalter ohne Kollisionsgefahr.
2
const combined = args.map(...).concat(nextArgs);
Führt eingehende Argumente der Reihe nach in Platzhalter vorheriger Funktionsaufrufe zusammen.
3
return filledCount >= arity ? fn(...combined) : curried(...combined);
Prüft die Anzahl aufgelöster Nicht-Platzhalter-Argumente vor der Ausführung gegen die erforderliche Stelligkeit.