Under et interview i denne uge blev jeg spurgt “hvad er forskellen på funktionel, objektorienteret og procedureprogrammering”, og for at være ærlig vidste jeg ikke rigtig, hvordan jeg skulle svare på det spørgsmål (og det var første gang, jeg hørte om procedureprogrammering…). Så i dag besluttede jeg mig for at lave lidt research og (forsøge at) forstå, hvad der er de vigtigste forskelle.
Lad os starte med nogle definitioner:
” Funktionel programmering (FP) er et programmeringsparadigme – en stil til opbygning af computerprogrammers struktur og elementer – der behandler beregning som evaluering af matematiske funktioner og undgår data med skiftende tilstande og mutable data.” – Wikipedia
” Objektorienteret programmering (OOP) er et programmeringsparadigme baseret på begrebet “objekter”, som kan indeholde data, i form af felter, ofte kendt som attributter; og kode, i form af procedurer, ofte kendt som metoder.” – Wikipedia
” Procedural programmering er et programmeringsparadigme, der er afledt af struktureret programmering, baseret på begrebet procedureopkald. Procedurer, også kendt som rutiner, underrutiner eller funktioner, indeholder simpelthen en række beregningstrin, der skal udføres.” – Wikipedia
Ok, så det er en introduktion, men lad os gå lidt mere i detaljer.
Først, hvad er et programmeringsparadigme? Det er en programmeringsstil, en måde at tænke på i forbindelse med softwarekonstruktion. Et programmeringsparadigme henviser ikke til et bestemt sprog, men snarere til en måde at programmere på, en metodologi. Nogle sprog gør det let at skrive i nogle paradigmer, men ikke i andre. For flere detaljer, se Wikipedia-artiklen.
Lad os nu dykke ned i de tre programmeringsparadigmer, der interesserer os i dag:
Procedural programmering (PP), også kendt som inline-programmering, tager udgangspunkt i en top-down tilgang. Det drejer sig om at skrive en liste af instruktioner, som fortæller computeren, hvad den skal gøre trin for trin. Den er afhængig af procedurer eller rutiner.
Objektorienteret programmering (OOP) handler om at indkapsle data og adfærd i objekter. En OOP-applikation anvender en samling af objekter, som ved, hvordan de skal udføre visse handlinger, og hvordan de skal interagere med andre elementer i applikationen. Et objekt kunne f.eks. være en person. Denne person ville have et navn (det ville være en egenskab ved objektet) og ville vide, hvordan den skal gå (det ville være en metode). En metode i OOP kan betragtes som en procedure i PP, men her hører den til et specifikt objekt. Et andet vigtigt aspekt af OOP er klasser. En klasse kan betragtes som et blueprint for et objekt.
Funktionel programmering (FP) handler om at sende data fra funktion til funktion til funktion for at få et resultat. I FP behandles funktioner som data, hvilket betyder, at du kan bruge dem som parametre, returnere dem, bygge funktioner ud fra andre funktioner og bygge brugerdefinerede funktioner. Funktioner i FP skal være rene funktioner, de skal undgå delt tilstand, og sideeffekter og data skal være uforanderlige. En ren funktion er en funktion, som givet den samme type input altid vil returnere det samme output, den er ikke afhængig af en lokal eller global tilstand. En delt tilstand er en tilstand, der deles mellem mere end én funktion eller mere end én datastruktur. Så med delt tilstand skal man for at forstå virkningerne af en funktion kende alle detaljerne for hver enkelt delt variabel for at kunne forstå virkningerne af en funktion. Det tilføjer en masse kompleksitet og tillader mindre modularitet.