Een generator is een stuk code dat waarden één voor één teruggeeft, alleen als je om de volgende vraagt. In plaats van vooraf een complete lijst te bouwen, pauzeert hij na elke waarde en pakt hij bij het volgende verzoek de draad weer op. Dat maakt hem ideaal voor grote of eindeloze reeksen.

Denk aan een nummerautomaat bij een drukke balie. Hij print niet alle tickets voor de hele dag vooraf; hij geeft het volgende nummer op het moment dat iemand op de knop drukt. Een generator werkt net zo: hij onthoudt waar hij is en produceert de volgende waarde op aanvraag. Vergelijk dat met een array, die alle items tegelijk in het geheugen houdt, prima voor kleine sets maar verspillend voor enorme.

In een taal als Python of modern JavaScript gebruikt een generator een keyword als ‘yield’ om aan te geven waar hij pauzeert. Daardoor kan een programma een bestand van meerdere gigabytes of een live datastroom regel voor regel lezen, met bijna geen geheugengebruik, hoe groot de bron ook wordt.

Een veelvoorkomend voorbeeld is een gigantische CSV-export inlezen. Laad je hem als gewone lijst, dan loopt het programma misschien vast op een bestand van 4GB. Lees je hem via een generator, dan neemt hij rij voor rij, dus het geheugengebruik blijft vlak of het bestand nu duizend rijen telt of tien miljoen. De keerzijde: je kunt er maar één keer op volgorde doorheen, en je kunt niet naar item 500 springen zonder de eerste 499 te passeren. Heb je echt willekeurige toegang of een vaste lengte nodig, dan is een gewone lijst de betere keuze.

Bij TopDevs zetten we generators in als de taak van een klant veel meer data moet verwerken dan in het geheugen past, zodat het systeem snel en stabiel blijft in plaats van vast te lopen.