Functional programming - ManoukK/functional-programming GitHub Wiki
Wat is functional programming?
Functional programming is eigenlijk code “makkelijk” opschrijven. Je gebruikt namen die voor zich spreken, dus i.p.v. i zeg je item. Je schrijft woorden langer uit zodat zelfs mensen die geen code snappen toch begrijpen wat er gebeurt.
Functional programming houdt ook in dat je shortcuts gebruikt. Het hoeft niet maar het is wel meer gebruikelijk om dat te doen. Nu schrijf je geen loopje meer maar gebruik je forEach of misschien zelfs wel reduce. De code wordt hierdoor veel korter en ook meer bug proof.
Voor alles (of het meeste) wat er gebeurt in je javascript schrijf je daar ook een function voor. Elke function heeft zijn eigen functie en heeft ook maar 1 functie. Zo hou je het overzichtelijk, nest je geen functions in functions en kan je snel bugs oplossen. Ook dit is weer handig om je code te begrijpen. Je houdt het leesbaar en bij elkaar.
Het is ook gebruikelijker om modules te gebruiken in je code. Module is een blokje javascript in een losse .js bestand die je inlaadt in een ander javascript bestand als je die code wilt gebruiken. Modules moet je heel algemeen schrijven omdat je het voor veel meer code wilt gebruiken dan waarvoor je de eerste instantie had geschreven. Dit kan aan het begin wel lastig zijn maar zal je op den duur tijd besparen.
Wat vind ik ervan?
Ik vind functional programming eigenlijk heel fijn. Soms is het een beetje magie maar als ik naar de bron ga kijken, waar het vandaan komt, dan snap ik het beter en kan ik het in mijn eigen code gebruiken. Voor mij helpt deze manier van programmeren om te begrijpen wat er gebeurt in javascript. Dit vind ik soms nog wel lastig omdat het van hot naar her kan springen maar functional programming maakt het voor mij makkelijker te lezen en als iemand ook goede benaming heeft gebruikt begrijp ik ook echt wat er gebeurt. Het maakt voor mij de code logischer.
Ik vind het ook makkelijker te schrijven. Vaak wist ik niet waar ik mee bezig was en wat alles deed. Met functional programming schrijf je bijna per stap wat de code moet doen en door duidelijke namen te gebruiken weet ik ook wat er gebeurt en hoe ik daar verder op kan borduren.
Higher order functions
higher order functions zijn eigenlijk bepaalde methods die het leven iets makkelijker maken. Voorbeelden van higher order functions zijn .filter, .map, .forEach, .reduce. Dit zijn eigenlijk functions die kort zijn geschreven maar under the hood veel doen. Zo word je code korter en leesbaarder ook voor mensen die geen verstand hebben van programmeren. Het is voor jezelf ook sneller en makkelijker. Eerst zou je bijvoorbeeld een for loop moeten schrijven en nu kan je heel makkelijk .forEach of .map gebruiken. Dit zorgt er ook voor dat het meer error proof is.
zelf heb ik onder andere gebruik gemaakt van .forEach, .map en .reduce. .reduce was meer een soort test. Ik wilde mijn data opschonen en die gelijk door laten loopen tot 1 groot getal/bedrag. In mijn code heb ik .reduce er wel uitgehaald omdat ik die nog iets te magisch vind maar het werkt ongeveer hetzelfde als .forEach alleen telt .reduce alle getallen bij elkaar op door een loop.
.map heb ik gebruikt omdat ik soms een array terug wilde hebben met het resultaat en .forEach heb ik gebruikt als ik dus geen array terug wilde hebben. Dit wilde ik bijvoorbeeld in mijn opdracht op data op te schonen. Daar heb ik .forEach gebruikt om zo door mijn array heen te loopen en aan te geven dat ik elke keer de prijzen bij elkaar op wilde tellen.
Ik vind higher order functions heel handig alleen het gevaarlijke voor mij is dat ik niet weet/begrijp wat er dan under the hood gebeurd. Dit is wel ontzettend handig om te weten als ik het wil gebruiken. Ik weet er nu een paar higher order functions maar ik moet wel onthouden dat als ik ze gebruik dat ik dan wel even moet opzoeken wat ze precies doen. (Dit is trouwens met alles handig). Higher order functions vind ik wel heel fijn lezen. De code blijft over het algemeen overzichtelijk en ik begrijp wat er gebeurd.
Linkjes die mij hebben geholpen bij het begrijpen:
- https://dev.to/damcosset/higher-order-functions-in-javascript-4j8b
- https://medium.com/@js_tut/higher-order-functions-in-javascript-732dc7a1952d
- NDM maar dan de specifieke higher order function methods