Computable.nl
  • Thema’s
    • Carrière
    • Innovatie & Transformatie
    • Cloud & Infrastructuur
    • Data & AI
    • Governance & Privacy
    • Security & Awareness
    • Software & Development
    • Werkplek & Beheer
  • Sectoren
    • Channel
    • Financiële dienstverlening
    • Logistiek
    • Onderwijs
    • Overheid
    • Zorg
  • Awards
    • Overzicht
    • Nieuws
    • Winnaars
    • Partner worden
  • Vacatures
    • Vacatures bekijken
    • Vacatures plaatsen
  • Bedrijven
    • Profielen
    • Producten & Diensten
  • Kennisbank
  • Magazine
  • Nieuwsbrief

Verder met oude talen; een verbeterde FOR-loop

20 augustus 1998 - 22:005 minuten leestijdOpinieSoftware & Development
C. Blomberg
C. Blomberg

Evolutionaire verbeteringen van bestaande hogere programmeertalen zijn veel vruchtbaarder dan een revolutionaire taal. Niels Blomberg illustreert zijn stelling aan de hand van een verbeterde versie van de elementaire ‘lus met variabele’.

In Computable (31 juli 1998) beschrijft Jan Karman de taal K, ‘de taal van de toekomst’. ‘K is ontworpen voor het analyseren van massale aantallen ‘real time’ en historische gegevens – ideaal voor financiële modellering’, aldus Karman. Mij lijkt het meer een niche-taal, sterk in een beperkt aantal toepassingen. Toegegeven, het gaat wel om toepassingen die sterk in de belangstelling staan: datawarehousing en Olap.
Maar veel vruchtbaarder dan een revolutie zijn evolutionaire verbeteringen van de bestaande hogere programmeertalen. In de jaren tachtig werden deze talen herdoopt tot 3GL (derde-generatietaal), om aan te geven dat ze verouderd waren door de komst van de 4GL’s. Inmiddels zijn de rollen omgedraaid. De 4GL’s uit de jaren tachtig (Clipper, DBase) zijn verouderd. De oude 3GL’s daartegen zijn in volle glorie terug als onderdeel van nieuwe gui-talen. Basic vormt (onder de naam VBA) het hart van MS Office; Pascal is terug als onderdeel van Delphi.
De hogere programmeertalen zijn in de loop van de afgelopen decennia evolutionair verbeterd. Toch zijn er nog steeds verbeteringen te definiëren, zelfs in zoiets elementairs als de ‘lus met variabele’, ook wel FOR-loop genoemd. Deze lus-constructie kent diverse gedaanten, die hieronder worden behandeld. Tot slot volgt een geheel verbeterde versie.

De oervorm: de tellende lus

Veel programmeurs denken bij ‘lus met variabele’ uitsluitend aan de tellende lus. De tellende lus komt in veel talen voor. De syntaxis in Basic is:
 
FOR = TO [STEP ]
 
De opvolgerlus
De ‘lus met variabele’ van Pascal ziet er als volgt uit:
 
FOR := [ TO | DOWNTO ] DO
 
Op het eerste gezicht lijkt het een tellende lus met alleen de stapgroottes 1 (TO) en -1 (DOWNTO). Dat is op zich wel juist voor INTEGER’s. Echter de basis van deze ‘lus met variabele’ is niet optellen, maar de functie opvolger (TO) en voorganger (DOWNTO). Behalve REAL’s zijn alle basis-types opvolger-types en dus bruikbaar in de FOR:
 
FOR my_char:= ‘z’ DOWNTO ‘a’ DO …
 
De discrete lus
Bij de tellende en de opvolgerlus wordt een nieuwe waarde van de lus-variabele bepaald uit de oude waarde. Bij de discrete lus daartegen worden alle aangenomen waarden opgesomd.
Deze ‘lus met variabele’ komt voor in de ‘command languages’ van bijna alle besturingssystemen. Meest gebruikte toepassing is de opsomming van files, meestal met wild-cards. Een voorbeeld uit MS-DOS:
 
FOR %i IN (*.bat) DO call %i
 
Ook programmeertalen ‘bovenop’ SQL kennen vergelijkbare constructies:
 
FOR row IN (SELECT * FROM )
 
Intermezzo: Sets in Pascal
Pascal kent een type set, dat overeenkomt met het wiskundige begrip verzameling. Een voorbeeld van een set: {1,i,i+3}. Zowel constanten, variabelen als expressies kunnen worden gebruikt.
Daarnaast zijn er intervallen, weergegeven door tweede waarden met daartussen twee punten: {1..i+99}.
Tot slot kunnen sets ook bestaan uit ranges en losse elementen: {1..4,6,8,10}.
 
De verbeterde ‘lus met variabele’
We definiëren de verbeterde ‘lus met variabele’ als een nieuw commando in Pascal:
 
FOR IN DO
 
Dit is een discrete lus. De Pascal FOR-loop met ‘TO’ wordt geëmuleerd als een range is.
 
De bovenstaande syntaxis moet worden uitgebreid om de ‘DOWNTO’ (of welke volgorde dan ook) te emuleren. Hierbij grijpen we terug op de selectie- en sorteringsmogelijkheden van het SQL-statement SELECT. Twee voorbeelden:
 
FOR i in {1..19} ORDER BY -i
FOR i in {1..19} WHERE ODD(i) DO

 
Het eerste voorbeeld is een emulatie van de ‘DOWNTO’. In het tweede voorbeeld worden alleen de oneven getallen in het interval meegenomen, een emulatie van een tellende lus met stapgrootte 2.
 
ANY_ORDER
Vaak is de volgorde waarin de lus wordt doorlopen onbelangrijk. Dat kan worden aangegeven met ANY_ORDER. In onderstaand voorbeeld worden de elementen van een array gesommeerd:
 
sum:=0;
FOR i IN {1..MAX} ANY_ORDER DO sum:=sum+ry[i];

 
Het gebruik van ANY_ORDER verhoogt de leesbaarheid van de broncode. Daarnaast kan de compiler zelf de optimale volgorde bepalen.
 
PARALLEL
In het bovenstaande voorbeeld wordt de variabele ‘sum’ gewijzigd, elke keer dat deze de lus doorloopt. Bij lussen waar een dergelijke variabele ontbreekt, is het mogelijk om de commando’s voor de verschillende waardes van de lus-variabele parallel uit te voeren:
 
FOR i IN {1..MAX} PARALLEL DO ry[i]:=ry[i]+1;
 
Net als ANY_ORDER verhoogt PARALLEL de leesbaarheid van de broncode. Indien de gebruikte hardware en systeemsoftware parallelle verwerking ondersteunt, is dit tevens een teken voor de compiler om een en ander te parallelliseren.

Verbetering

De verbeterde ‘lus met variabele’ is een combinatie van bestaande concepten: de discrete lus, de SET’s van Pascal en de WHERE en ORDER BY van SQL. Door deze zaken te combineren, ontstaat een ‘lus met variabele’ met de functionaliteit van zowel de opvolgerlus, de discrete lus en (via WHERE) de tellende lus met willekeurige stapgrootte.
ANY_ORDER en PARALLEL zijn min of meer logische uitbreidingen van de ORDER BY.
PARALLEL maakt hogere programmeertalen geschikt voor parallelle hardware.
 
Drs. C.Blomberg, senior information engineer by Stork Engineers and Contractors (SE&C)

Deel

    Inschrijven nieuwsbrief Computable

    Door te klikken op inschrijven geef je toestemming aan Jaarbeurs B.V. om je naam en e-mailadres te verwerken voor het verzenden van een of meer mailings namens Computable. Je kunt je toestemming te allen tijde intrekken via de af­meld­func­tie in de nieuwsbrief.
    Wil je weten hoe Jaarbeurs B.V. omgaat met jouw per­soons­ge­ge­vens? Klik dan hier voor ons privacy statement.

    Whitepapers

    Computable.nl

    Agentic AI in actie

    De stappen van automatiseren naar écht autonoom werken. Welke toepassingen zijn succesvol?

    Computable.nl

    Staat Digitale Connectiviteit Bouw- en Installatiebranche

    Connectiviteit is de kern van veel processen en van strategisch belang voor de toekomst. Waar sta jij?

    Computable.nl

    Design Sprints: 4 dagen van idee naar prototype

    Hoe zet je in vier dagen tijd een gevalideerd prototype neer met Design Sprints?

    Geef een reactie Reactie annuleren

    Je moet ingelogd zijn op om een reactie te plaatsen.

    Populaire berichten

    Meer artikelen

    Uitgelicht

    Partnerartikel
    Data & AI

    AI in softwaretesten: tussen belofte e...

    De opkomst van kunstmatige intelligentie (AI) wekte hoge verwachtingen in de wereld van softwaretesten. Zelflerende testsuites, automatisch gegenereerde testgevallen en...

    Meer persberichten

    Meer lezen

    Software & Development

    Licentiestructuur van Microsoft 365 en Office 365 op de schop

    ai klusjes gig
    Data & AI

    Kort: Java en ai-tools vernieuwd, klusjes scoren (en meer)

    Software & Development

    Value8 wil totale controle over Ctac

    Data & AI

    Kort: Innobrix wint Google-prijs, anonieme ai helpt zorg nog meer (en nog meer)

    Data & AI

    Kort: ai op universiteit nu riskeert onoplosbare problemen later (en meer)

    Overheid

    Grote kwetsbaarheid Rijk bij uitval ict-dienstverlening

    ...

    Footer

    Direct naar

    • Carrièretests
    • Kennisbank
    • Planning
    • Computable Awards
    • Magazine
    • Ontvang Computable e-Magazine
    • Cybersec e-Magazine
    • Topics
    • Phishing
    • Ransomware
    • NEN 7510

    Producten

    • Adverteren en meer…
    • Jouw Producten en Bedrijfsprofiel
    • Whitepapers & Leads
    • Vacatures & Employer Branding
    • Persberichten

    Contact

    • Colofon
    • Computable en de AVG
    • Service & contact
    • Inschrijven nieuwsbrief
    • Inlog

    Social

    • Facebook
    • X
    • LinkedIn
    • YouTube
    • Instagram
    © 2025 Jaarbeurs
    • Disclaimer
    • Gebruikersvoorwaarden
    • Privacy statement
    Computable.nl is een product van Jaarbeurs