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

Tot nu toe gebruikten we al bestaande functies en methoden om een bewerking te laten uitvoeren: Convert.ToInt32, Math.Sqrt, Console.ReadLine, … Je gaf zo’n functie iets mee tussen de haakjes, en ze gaf je een resultaat terug.

Vanaf nu maken we zelf functies. Een functie is een stuk code waaraan we een naam geven. We kunnen er parameters aan meegeven, en ze kan een resultaat van een bepaald type teruggeven.

Waarom zelf functies maken?

Stel: je wil op verschillende plaatsen in je programma twee getallen optellen. Tot nu toe schreef je die berekening telkens opnieuw uit. Door er één keer een functie voor te maken, kan je ze daarna gewoon bij naam oproepen zo vaak je wil. Dat maakt je code korter, leesbaarder en makkelijker te onderhouden.

Een voorbeeld: twee getallen optellen

Twee getallen optellen kan je gewoon met eenvoudige code doen, zoals je dat altijd al deed:

int getal1 = 10, getal2 = 20;
int resultaat;

resultaat = getal1 + getal2;
Console.WriteLine(resultaat);

We kunnen ditzelfde ook schrijven door de optelling in een eigen functie te stoppen. We noemen die functie som:

int getal1 = 10, getal2 = 20;
int resultaat;

resultaat = som(getal1, getal2);   // de functie oproepen
Console.WriteLine(resultaat);

static int som(int getala, int getalb)   // de functie definiëren
{
    int uitkomst = getala + getalb;
    return uitkomst;
}

Er gebeuren hier twee dingen, en het is belangrijk om ze uit elkaar te houden:

De definitie ontleed

Laten we de eerste regel van de definitie woord voor woord bekijken:

static int som(int getala, int getalb)
OnderdeelBetekenis
staticeen vast woord dat je voorlopig altijd vóór een functie zet. Het betekent dat de functie op zichzelf werkt, los van een object. We gaan daar later dieper op in; voor nu schrijf je het gewoon zo.
int (vóór de naam)het retourtype: het type van de waarde die de functie teruggeeft. Hier geeft som een geheel getal terug, dus int. Geeft een functie een kommagetal terug, dan staat hier double; een tekst, dan string; waar of vals, dan bool.
somde naam van de functie. Met die naam roep je ze later op.
(int getala, int getalb)de parameters: de waarden die je aan de functie meegeeft. Elke parameter heeft een type (int) en een naam (getala, getalb). Binnen de functie gebruik je ze als gewone variabelen.

De waarde teruggeven met return

In de code van de functie wordt de waarde van de parameter getala opgeteld bij de waarde van de parameter getalb, en het resultaat komt in de variabele uitkomst. De laatste instructie van de functie geeft dat resultaat terug met het sleutelwoord return:

return uitkomst;

Door de return-instructie wordt het resultaat als het ware naar buiten geduwd. In de instructie waar de functie wordt opgeroepen, wordt dat resultaat opgevangen in de variabele resultaat:

resultaat = som(getal1, getal2);

Hier krijgt getala de waarde van getal1 (10) en getalb de waarde van getal2 (20). De functie berekent 10 + 20, geeft 30 terug, en die waarde komt in resultaat terecht.

Een functie met een resultaat heeft dus altijd een retourtype (geen void) en eindigt met een return-instructie die een waarde van dat type teruggeeft. Vergeet je return, dan geeft de functie niets terug en geeft de compiler een foutmelding.

Het resultaat opvangen of meteen gebruiken

Je hoeft het resultaat niet per se in een aparte variabele te bewaren. Je kan de functieoproep ook meteen op de plaats gebruiken waar je de waarde nodig hebt, bijvoorbeeld rechtstreeks in een Console.WriteLine:

int getal1 = 10, getal2 = 20;
Console.WriteLine(som(getal1, getal2));   // toont 30

static int som(int getala, int getalb)
{
    return getala + getalb;
}

In de oefeningen die volgen schrijf je telkens zelf een functie die een waarde teruggeeft, en roep je die op vanuit je hoofdprogramma.