Functioneel programmeren in JavaScript Deel 2 - Combinatoren
Pawel Ged
Vue.js ontwikkelaar
Dit is het tweede deel van onze serie artikelen over de kracht van functioneel programmeren in JavaScript. Bekijk dit artikel om je kennis over Combinatoren uit te breiden.
Inleiding tot combinatoren
Combinatoren zijn functies op een hoger niveau waarmee je functies, variabelen of andere combinatoren kunt combineren. Meestal bevatten ze geen declaraties van hun eigen variabelen of bedrijfslogica. Ze zijn de enige die de besturing doorspoelen in een functieprogramma.
In dit artikel zal ik proberen er een paar te behandelen:
Tik op
Curry
Pijpen/Componeren
Vork
Afwisseling
Volgorde
Tik op
Een combinator is erg handig voor functies die niets teruggeven. Het neemt de functie waar de parameter naartoe gaat en geeft deze terug.
const som = (a, b, c) => a + b + c
const currySum = curry(som)
/*
mogelijke oproepen
currySum(a)(b)(c),
currySum(a)(b,c),
currySum(a,b)(c),
currySum(a,b,c)
*/
currySum(1) // (b, c) => 1 + a + b of (b) => (c) => 1 + a + b
currySum(5)(10) // (c) => 5 + 10 + b
currySum(5, 10) // (c) => 5 + 10 + b
currySum(5)(10)(20) // 35
currySum(5, 10)(20) // 35
currySum(5)(10, 20) // 35
const delerBy = curry((a, b) => b / a)
const multiplyBy = curry((a, b) => a * b)
const divideByTwo = delenDoor(2)
divideByTwo(10) // geeft 5 terug
const multiplyByFive = multiplyBy(5)
multiplyByFive(10) // geeft 50 terug
Pijpen/Componeren
Door compositie is het mogelijk om gegevens door te geven van de ene functie naar de andere. Het is belangrijk dat de functies hetzelfde aantal argumenten aannemen. Het verschil tussen pipe en compose is dat de eerste de functie van de eerste tot de laatste uitvoert, en compose ze vanaf het einde aanroept.
const lengte = (array) => array.lengte
const som = (array) => array.reduce((a, b) => a + b, 0)
const delen = (a, b) => a / b
const rekenkundig gemiddelde = fork(delen, som, lengte)
arithmeticAverage([5, 3, 2, 8, 4, 2]) // geeft 4 terug
Afwisseling
Deze combinator neemt twee functies en geeft het resultaat van de eerste terug als deze waar is. Anders geeft hij het resultaat van de tweede functie terug.