Drop hier links of afbeeldingen om ze aan de editor toe te voegen.

Bij de gewone while-lus wordt de voorwaarde eerst gecontroleerd, nog voor de code tussen de accolades ook maar één keer is uitgevoerd. Soms is dat lastig: je moet er dan zelf voor zorgen dat aan de voorwaarde voldaan is voordat de lus voor het eerst draait (bijvoorbeeld door een variabele vooraf een geschikte beginwaarde te geven).

Om dat probleem op te lossen bestaat er een tweede vorm van de herhalingslus: de do-while-lus. Hierbij wordt de voorwaarde pas gecontroleerd na het uitvoeren van de code tussen de accolades. Het gevolg is belangrijk:

Bij een do-while-lus wordt de code tussen de accolades altijd minstens één keer uitgevoerd, ongeacht of de voorwaarde waar is of niet.

De structuur

Een do-while-lus ziet er zo uit:

do
{
    // Hier komen de instructies van het programma
} while (voorwaarde);

Merk twee dingen op:

Schematisch ziet een do-while-lus er zo uit. Merk op dat het lichaam vóór de voorwaarde staat, en dus altijd minstens één keer draait:

lichaam van de lus voorwaarde verder waar niet waar

Let op de puntkomma achter while (voorwaarde);. Bij een gewone while-lus is die puntkomma niet nodig, maar bij een do-while-lus dus wel. Vergeet je ze, dan krijg je een foutmelding.

Het verschil met de while-lus

Dezelfde herhaling, twee vormen:

while-lus do-while-lus
Voorwaarde wordt getest vóór de body na de body
Body draait minstens 0 keer 1 keer
Puntkomma achter while(...) nee ja

Kies een do-while-lus wanneer de body sowieso minstens één keer moet draaien. Een typisch voorbeeld: je vraagt iets aan de gebruiker en herhaalt de vraag zolang het antwoord niet voldoet. De eerste vraag moet je altijd stellen, dus de body moet sowieso één keer lopen, voordat je de voorwaarde kunt controleren.

Een uitgewerkt voorbeeld

We schrijven een programma dat na afloop vraagt: “Wil je het programma nog eens uitvoeren?” Zolang de gebruiker J (van ja) antwoordt, wordt de body opnieuw uitgevoerd. De vraag moet sowieso één keer gesteld worden, dus een do-while-lus past hier perfect.

// declaratie van variabelen
string antwoord;

// hoofdstructuur van het programma
do
{
    // Hier komen de instructies van het programma

    Console.Write("Wil je het programma nog eens uitvoeren? (J/N) ");
    antwoord = Console.ReadLine();
} while (antwoord.ToUpper().Substring(0, 1) == "J");

// Resultaat weergeven
Console.WriteLine();
Console.WriteLine("Bedankt om dit programma te gebruiken");

Bespreking van de code

De voorwaarde antwoord.ToUpper().Substring(0, 1) == "J" is wat technischer:

Met een do-while-lus hoef je geen kunstmatige beginwaarde te verzinnen om de lus voor het eerst te laten draaien: de body draait altijd al één keer, en pas daarna beslis je of je nog eens herhaalt.