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

In de vorige activiteiten maakten we functies die een resultaat teruggeven met return. Maar soms wil je een functie die wél iets doet, maar niets teruggeeft. Denk aan een functie die enkel iets op het scherm toont: ze voert een taak uit, maar er is geen waarde om mee verder te rekenen.

Een functie zonder resultaat noemen we ook wel een procedure. Als returntype gebruik je dan het sleutelwoord void (“leeg”). Dat betekent letterlijk: deze functie geeft niets terug.

Een voorbeeld: een titel netjes tonen

Stel dat we boven aan een programma een titel willen tonen, mooi omkaderd met sterretjes. Dat is een typische taak voor een procedure: ze toont iets, maar geeft geen waarde terug. We maken er een functie SchrijfTitel van die als parameter de titeltekst krijgt:

SchrijfTitel("Dit programma berekent de vierkantswortel");

De functie zelf ziet er zo uit:

void SchrijfTitel(string v)
{
    for (int i = 0; i < v.Length + 4; i++)
    {
        Console.Write("*");
    }
    Console.WriteLine();
    Console.WriteLine("* " + v + " *");
    for (int i = 0; i < v.Length + 4; i++)
    {
        Console.Write("*");
    }
    Console.WriteLine();
}

De eerste lus tekent een rij sterretjes, even breed als de tekst plus vier (twee sterretjes en twee spaties links en rechts). Daarna komt de titelregel zelf, en ten slotte nog eens dezelfde rij sterretjes. Roep je de functie op met de tekst hierboven, dan krijg je:

*********************************************
* Dit programma berekent de vierkantswortel *
*********************************************

Waarom een aparte functie?

Merk op dat het maken van de functie SchrijfTitel ervoor zorgt dat de code waar je ze oproept leesbaar blijft. De naam van de functie zegt meteen wat er gebeurt, zonder dat je de tien regels lus-code hoeft te lezen.

Functies kunnen dus gebruikt worden om code leesbaarder te maken. En zodra je merkt dat je een stuk code wil kopiëren, is dat het moment om er een functie van te maken. Een kopie maken lijkt sneller, maar het maakt je code lastiger te onderhouden: zit er een fout in de gekopieerde code, dan moet je die op elke plek opnieuw verbeteren. In een groot programma is zo’n kopie bovendien moeilijk terug te vinden. Eén functie die je overal oproept, pas je maar op één plek aan.

Een procedure is een functie met returntype void: ze voert een taak uit maar geeft geen waarde terug. Je roept ze op als een gewone instructie (op een eigen regel), niet als deel van een berekening.