Skip to content

Functional Programming

Deanna Bosschert edited this page Nov 3, 2020 · 8 revisions

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.

In a Nutshell

Currying

Het deels invullen van een formule zodat je β€˜m later volledig kan invullen (β€”> re-usable)

  • Bij declareren variabele: unbound
  • Bij gebruiken variabele (invullen): bound.

Object-oriented programming

Was top om zo met meerdere programmeurs samen te kunnen werken aan een programma.
Werd alleen steeds minder efficient naarmate de applicatie groter wordt.

Functional daarentegen:

β€’ 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

Procedural programming

β€’ 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)

Wat mag wel?

β€’ Anonieme functies (middels arrowfunctions)
β€’ Functies hebben maximaal 1 argument en maximaal 1 returnwaarde(~argumentarray:return arguments) (unary function) β€’ Oneliners

MaakUser()      
MaakNaam()       
MaakGeboortejaar()      
MaakEmailadres()      
CheckEmailadres()      

Pure en impure functies

Impure:

function magSpelen(leeftijd) {
  return leeftijd >= PEGI
} 

(pakt externe data)

Pure:

function makeAdder(a) {
  return function (b) {
    return a + b
  }
}
const add42 = makeAdder(42)
Console.log(add42(4))

Interesting takes

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

Hoe heb ik dit toegepast?

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.

πŸ“‹ Project

πŸ—“ Logboek

🧹 Data cleaning

πŸ“‹ Surveydata

βš™πŸ“ Documentatie

πŸ–ŠοΈ Notes

πŸ“ˆ Evaluatie

Clone this wiki locally