-
Notifications
You must be signed in to change notification settings - Fork 0
Functional Programming
TL;DR: je houdt je variabelen binnen de functies, cluttered daarmee niet de global scope en zorgt er zo voor dat je code alleen bestaat uit blokken die al geprocessede info eruit yeeten.
= minder spaghetticode.
= minder 'onopvallende invloeden op andere stukken code'.
= minder bugs.
Het deels invullen van een formule zodat je βm later volledig kan invullen (β> re-usable)
- Bij declareren variabele: unbound
- Bij gebruiken variabele (invullen): bound.
Was top om zo met meerdere programmeurs samen te kunnen werken aan een programma.
Werd alleen steeds minder efficient naarmate de applicatie groter wordt.
β’ Bugproof
β’ Geautomatiseerd testen
β’ Maakt gebruik van recursie
β’ inFInItEloOps
β’ Er bestaat geen state
β’ Kost dan ook geen werkgeheugen (behalve bij het parsen)
β’ Bij page refresh moet de hele f*****g structuur weer worden doorlopen bij OOP
β’ Als je programma klaar is, is het klaar.
β’ Functies doen in principe maar 1 ding en da's herbruikbaar
β’ Doet niets buiten hun eigen scope
β’ Makkelijk te begrijpen wat er gebeurt
β’ Soort fabrieksstraat;lopendebandwerk waarbij elk machientje een functie is
β’ Zie je code als een soort boom die afgelopen wordt
β’ Genereerde output dmv doorlopen van die boomstructuur
β’ Blockscopes
--> functies aanroepen
Imperative: go-to statements (lineair je code doorlopen)
β’ Anonieme functies (middels arrowfunctions)
β’ Functies hebben maximaal 1 argument en maximaal 1 returnwaarde(~argumentarray:return arguments) (unary function)
β’ Oneliners
MaakUser()
MaakNaam()
MaakGeboortejaar()
MaakEmailadres()
CheckEmailadres() function magSpelen(leeftijd) {
return leeftijd >= PEGI
} (pakt externe data)
function makeAdder(a) {
return function (b) {
return a + b
}
}const add42 = makeAdder(42)
Console.log(add42(4))Vanaf nu heten IIFEβs dogβs balls
β> runt 1 keer, valt daarna weg en valt niet meer te manipuleren
- J. Sturkenboom
"Gooi anders ook eens Object.freeze om je functie heen en zie waar je fout zit."
Elk programma dat je schrijft is niet meer dan .map, .filter en .reduce
Schrijf eerst je filter;
β’ Filter bijv wachtwoorden eruit
β’ Map de achtergebleven gegevens naar een html-representatie
β’ Reduce de output naar de browser als whateverweergave
Ik heb zo veel mogelijk m'n filterfuncties opgedeeld in modules; zo bleef ik met steeds kleinere functies over.
Momenteel geef ik wel twee variabelen mee; de input, en bijbehorende variabele/columnnaam. Dit kan ik tackelen door de columnnaam gewoon in de data te verwerken/de naam daaruit te halen. Heb ik alleen geen tijd meer voor gehad, en is niet extreem vuil als ik het laat zoals het is.
Ik ben/was wel van plan om alles verder door te refactoren waarbij ik oa dat fix, en uitkom op de filterfuncties van maar 1 input, en da's aangegeven in de code.