Sobes.tech
Middle

Wat is functioneel programmeren?

sobes.tech AI

Antwoord van AI

Functioneel programmeren is een programmeerparadigma waarbij berekeningen worden beschouwd als het evalueren van wiskundige functies, waarbij veranderlijke toestand en wijzigbare gegevens worden vermeden.

Basisprincipes:

  • Pure functies: Functies die bij dezelfde invoer altijd hetzelfde resultaat opleveren en geen bijwerkingen hebben (bijvoorbeeld het wijzigen van externe variabelen, invoer/uitvoer).
  • Onveranderlijkheid: Gegevens veranderen niet na creatie. Elke "wijziging" creëert een nieuwe kopie van de gegevens.
  • Functies als first-class objecten: Functies kunnen worden doorgegeven als argumenten, teruggegeven uit andere functies en aan variabelen worden toegewezen.
  • Referentiële transparantie: Een uitdrukking kan worden vervangen door zijn waarde zonder het gedrag van het programma te veranderen. Dit is direct gerelateerd aan pure functies.

Voordelen:

  • Voorspelbaarheid: Makkelijker te testen en debuggen vanwege het ontbreken van bijwerkingen.
  • Parallelisme: Makkelijker om code parallel uit te voeren, omdat er geen gedeelde mutable staat is.
  • Onderhoudbaarheid: De code wordt modularer en begrijpelijker.

Voorbeeld in JavaScript:

// Onzuivere functie (wijzigt externe toestand)
let total = 0;
function addToTotal(value) {
  total += value;
  return total;
}

// Zuivere functie (wijzigt externe toestand niet, geeft nieuwe waarde)
function add(a, b) {
  return a + b;
}

// Gebruik van functies als first-class objecten (functie als argument)
function processArray(arr, handler) {
  return arr.map(handler);
}

const numbers = [1, 2, 3];
const doubledNumbers = processArray(numbers, x => x * 2);

Hoewel JavaScript geen strikt functionele taal is, maken zijn mogelijkheden (zoals pure functies, array-methoden map, filter, reduce) het mogelijk om de principes van functioneel programmeren toe te passen. In frontend-ontwikkeling wordt FP vaak gebruikt in bibliotheken en frameworks (bijvoorbeeld Redux, React met hooks).