JavaScript Academy · Les

Functies curryen

Transformeer functies met meerdere argumenten in ketens.

Les 2 van 413 stappen

Functies curryen is een gratis JavaScript Academy-les op CoddyKit. Dit is les 2 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject JavaScript Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus JavaScript Academy bevat in totaal 4 lessen.

Wat is currying?

Currying zet een functie die meerdere argumenten aanneemt om in een reeks functies die elk één argument aannemen.

In plaats van add(1, 2, 3) roep je add(1)(2)(3) aan. Elke aanroep geeft de volgende functie terug totdat alle argumenten zijn verzameld.

Currying met de hand

De duidelijkste manier om currying te zien, is door geneste functies te schrijven. Elke functie geeft de volgende terug en sluit over de eerdere argumenten.

function add(a) {
  return function (b) {
    return function (c) {
      return a + b + c;
    };
  };
}

console.log(add(1)(2)(3));

Geneste arrowfuncties

Arrowfuncties maken definities met currying korter. Elke => geeft de volgende arrowfunctie terug en de laatste voert het werk uit.

const add = a => b => c => a + b + c;

console.log(add(1)(2)(3));
console.log(add(10)(20)(30));

Closures onthouden argumenten

Currying steunt op closures. Elke teruggegeven functie houdt een verwijzing naar de variabelen uit het buitenste bereik, zodat eerdere argumenten beschikbaar blijven totdat de laatste aanroep wordt uitgevoerd.

const greet = greeting => name => greeting + ', ' + name + '!';

const sayHi = greet('Hi');
console.log(sayHi('Ada'));
console.log(sayHi('Grace'));

Stap voor stap aanroepen

Je hoeft niet alle argumenten tegelijk toe te passen. Je kunt halverwege stoppen en het gedeeltelijke resultaat in een variabele bewaren om het opnieuw te gebruiken.

const add = a => b => c => a + b + c;

const addOne = add(1);
const addOneAndTwo = addOne(2);

console.log(addOneAndTwo(3));
console.log(addOneAndTwo(100));

Een algemene curry-hulpfunctie

Geneste functies met de hand schrijven is omslachtig. Een algemene curry-hulpfunctie verzamelt argumenten totdat deze genoeg heeft en roept daarna de oorspronkelijke functie aan.

function curry(fn) {
  return function curried(...args) {
    if (args.length >= fn.length) {
      return fn(...args);
    }
    return (...more) => curried(...args, ...more);
  };
}

const add = curry((a, b, c) => a + b + c);
console.log(add(1)(2)(3));

Flexibel aanroepen met curry

Een goede curry-hulpfunctie accepteert argumenten in elke groepering. fn.length vertelt hoeveel parameters de oorspronkelijke functie heeft gedeclareerd.

function curry(fn) {
  return function curried(...args) {
    if (args.length >= fn.length) {
      return fn(...args);
    }
    return (...more) => curried(...args, ...more);
  };
}

const add = curry((a, b, c) => a + b + c);
console.log(add(1, 2, 3));
console.log(add(1, 2)(3));
console.log(add(1)(2, 3));

Currying voor specialisatie

Currying maakt specialisatie natuurlijk: pas het eerste argument toe en hergebruik de geretourneerde functie in veel aanroepen.

const multiply = a => b => a * b;

const double = multiply(2);
const triple = multiply(3);

console.log(double(5));
console.log(triple(5));

Currying met arraymethoden

Gecurryde functies passen perfect in map en filter, omdat elke functie een functie met één argument oplevert die klaar is om elk element te ontvangen.

const greaterThan = min => value => value > min;

const over10 = greaterThan(10);
console.log([5, 12, 8, 20].filter(over10));

Currying versus gedeeltelijke toepassing

Gedeeltelijke toepassing legt sommige argumenten vast en laat de rest over voor één latere aanroep. Currying splitst een functie altijd op in een keten van aanroepen met één argument.

Currying is één specifieke, volledig opgesplitste vorm van gedeeltelijke toepassing.

const partial = (a, b) => c => a + b + c;
const curried = a => b => c => a + b + c;

console.log(partial(1, 2)(3));
console.log(curried(1)(2)(3));

Waarom currying?

Currying stimuleert kleine, samenstelbare en herbruikbare functies. Het past natuurlijk bij functiecompositie, die je hierna gaat verkennen. Het belangrijkste inzicht: een gecurryde functie is nooit 'onvolledig'; ze retourneert gewoon een andere functie totdat aan alle argumenten is voldaan.

const tag = name => content => '<' + name + '>' + content + '</' + name + '>';

const bold = tag('b');
console.log(bold('important'));
console.log(tag('i')('slanted'));

Korte controle

Gegeven const add = a => b => c => a + b + c;, wat is de uitkomst van add(1)(2)?

Samenvatting: currying

Je hebt geleerd functies op te splitsen in ketens met één argument:

  • Gecurryde functies retourneren via sluitingen voor elk argument een nieuwe functie.
  • Geneste pijlen geven compacte gecurryde definities.
  • Een algemene curry-hulpfunctie gebruikt fn.length om te weten wanneer er genoeg argumenten zijn aangekomen.
  • Currying maakt nette specialisatie en compositie mogelijk.
Gratis beginnen

Leer JavaScript met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
59
Lessen
200

Veelgestelde vragen

Is de les “Functies curryen” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad JavaScript Academy, waaronder “Functies curryen”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus JavaScript Academy bevat in totaal 4 lessen.

Wat leer ik in “Functies curryen”?

Transformeer functies met meerdere argumenten in ketens. Je oefent met JavaScript Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met JavaScript Academy te beginnen?

Ervaring vooraf is niet nodig. JavaScript Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.

Hoe lang duurt de les “Functies curryen”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over JavaScript Academy?

Ja. Elke les over JavaScript Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Partial application
  2. Functies curryen
  3. Functiecompositie
  4. pipe en compose bouwen
← Terug naar JavaScript Academy