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.
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.
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:
static int som(...). Hier beschrijf je wat de functie doet. Dit
stuk wordt op zichzelf nog niet uitgevoerd; het wacht tot je het oproept.som(getal1, getal2) in je
hoofdprogramma. Op dat moment springt het programma naar de functie, voert ze
uit, en komt met het resultaat terug.Laten we de eerste regel van de definitie woord voor woord bekijken:
static int som(int getala, int getalb)
| Onderdeel | Betekenis |
|---|---|
static | een 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. |
som | de 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. |
returnIn 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 eenreturn-instructie die een waarde van dat type teruggeeft. Vergeet jereturn, dan geeft de functie niets terug en geeft de compiler een foutmelding.
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.