Functies zijn 'eersteklas burgers'
Van een programmeertaal wordt gezegd dat ze eersteklas functies (first-class functions of literal functions) ondersteunt als het functies behandelt als eersteklas objecten. Concreet betekent dit dat de taal:
- het aanmaken van nieuwe functies tijdens de uitvoering van een programma ondersteunt;
- toelaat dat functies toegekend kunnen worden aan:
- gegevensstructuren,
- als argumenten voor andere functies kunnen meegegeven worden,
- en als waarde van andere functies geretourneerd kunnen worden.
Inleiding
Het begrip "eersteklas functies" werd geïntroduceerd door de Britse computerwetenschapper Christopher Strachey in de jaren 1960.
Filmpje: Functies zijn 'eersteklas burgers' in JavaScript
Dit is een belangrijk begrip van functioneel programmeren namelijk functies als eersterangs burgers. Michael Fogus definiëert eersterangs functies in zijn boek, Functional JavaScript, 2013, als volgt:
The term “first-class” means that something is just a value. A first-class function is one that can go anywhere that any other value can go—there are few to no restrictions. A number in JavaScript is surely a first-class thing, and therefore a first-class function has a similar nature:
- A number can be stored in a variable and so can a function:
var fortytwo = function() { return 42 };
- A number can be stored in an array slot and so can a function:
var fortytwos = [42, function() { return 42 }];
- A number can be stored in an object field and so can a function:
var fortytwos = {number: 42, fun: function() { return 42 }};
- A number can be created as needed and so can a function:
42 + (function() { return 42 })(); // => 84
- A number can be passed to a function and so can a function:
function weirdAdd(n, f) { return n + f() }
weirdAdd(42, function() { return 42 }); // => 84
- A number can be returned from a function and so can a function:
return 42;
return function() { return 42 };
Javascript functies zijn 'First-Class omdat':
- een functie is een object;
- ze aan eenn variabelen toegekend kunnenworden;
- ze eigenschappen zijn van een ander object
- ze doorgegeven kunnen worden als argument aan een andere functie
- ze door een functie geretourneerd kunnen worden
Top-level functies zijn eigenschappen van het window
object, net als alle andere globale variabelen. De volgende statements hebben allemaal de zelfde uitwerking:
function hallo() { alert('hallo') } var hallo = function() { alert('hallo') } window.hallo = function() { alert('hallo') }
Het feit dat functies eersteklas burgers zijn in JavaScript zorgt ervoor dat je 'rare' dingen kan doen in JavaScript.
Inhoudstafel
- Functies zijn data
- Anonieme functies
- Callback functies
- Functies die een functie retourneren
- Functies die zichzelf wijzigen
- Immediately-Invoked Function Expression
- Inner (private) functions
- Closures
- Closures in de praktijk
2016-10-08 00:30:13