Een functionele taal is een programmeertaal die rekenwerk ziet als een keten van kleine, voorspelbare functies. Elke functie krijgt invoer en geeft uitvoer terug zonder stilletjes iets buiten zichzelf te veranderen. Die ene regel, geen verborgen neveneffecten, onderscheidt zo’n taal van de meeste gangbare talen.

Zie het als een koffiemachine die altijd hetzelfde kopje maakt uit dezelfde bonen en dezelfde knop. Hij hangt nooit af van wat de vorige persoon bestelde. Een functie in deze stijl werkt net zo: geef hem het getal 5 en hij geeft elke keer 25 terug, zonder verrassingen. Vergelijk dat met object-oriented programming, waar objecten een toestand bewaren die in de loop van de tijd verandert en de ene methode de andere kan beïnvloeden op manieren die lastig te volgen zijn.

De meeste populaire tools zijn niet puur functioneel, maar de ideeën zitten inmiddels overal. Modern JavaScript en een typische general-purpose language leveren tegenwoordig map, filter en reduce, zodat teams functionele code kunnen schrijven waar dat helpt. Pure functies komen het best tot hun recht bij betalingen, dataverwerking en alles waar dezelfde invoer altijd hetzelfde resultaat moet geven.

Er is een echte reden waarom dit telt op machines met meerdere cores. Als een functie nooit aan gedeelde data komt, kun je er veel tegelijk draaien zonder dat twee threads elkaar in de weg zitten, en dat scheelt een hele klasse vervelende bugs. De keerzijde is dat sommige alledaagse taken, zoals een record ter plekke bijwerken of een database aanspreken, meer denkwerk kosten als niets mag veranderen. De meeste teams kiezen het midden: pure functies voor de logica, en de rommelige neveneffecten netjes aan de randen.

Bij TopDevs grijpen we naar functionele patronen als correctheid het zwaarst weegt, want code zonder verborgen toestand is op lange termijn veel goedkoper om te testen en te vertrouwen.