9.2 Parameters

Mensen die een eigen huis kopen sluiten daarvoor meestal een hypotheek af. Het geleende geld moeten ze uiteraard met rente terugbetalen. Gebruikelijk is de zogenaamde annuïteitenmethode. Bij deze methode is het bedrag dat elk jaar betaald moet worden gedurende de gehele looptijd een vast bedrag. Het bedrag bestaat uit een aflossingsdeel en een rentedeel. Het aandeel van aflossing en het aandeel van rente in het vaste bedrag is wisselend. In het begin veel rente en weinig aflossing. Naarmate er steeds meer is afgelost, stijgt het rentegedeelte van de annuïteit en daalt het aflossingsdeel. Bij een lening van 120.000, een rentepercentage van 7.3 en een looptijd van 30 jaar bedraagt de annuïteit 9963,42 per jaar.

Voor het berekenen van de annuïteit is een subprogramma geschreven. Het berekent de annuïteit die hoort bij een gegeven hypotheekbedrag, een gegeven rentepercentage en een gegeven aantal jaren. Bij de uitvoering van het subprogramma moet natuurlijk bekend zijn om welk bedrag, welk percentage en hoeveel jaren het gaat. Het subprogramma verwacht bij de aanroep deze benodigde gegevens te ontvangen. Het subprogramma krijgt de gegevens vanuit het hoofdprogramma bij aanroep vermeld. Onder hoofdprogramma verstaan we een programma dat een subprogramma aanroept.

De gegevens waarmee dit subprogramma zijn werk doet, dienen als het ware om het subprogramma 'in te stellen'. Zulke instelgegevens noemt men parameters (uitgesproken met de klemtoom op ra en niet op pa of me!). In de driedelige dikke van Dale staat als omschrijving van parameter: aanvullende specificatie van het programma van een rekentuig.

Op het moment dat we een subroutine aanroepen vanuit een programma, moeten we weten hoeveel parameters het subprogramma verwacht. Het subprogramma heeft drie gegevens nodig (bedrag, percentage en aantal jaren) om de berekening te kunnen maken. Met deze drie gegevens berekent het subprogramma de annuïteit. Als het hoofdprogramma over de uitkomst wil beschikken, dan moet het subprogramma de berekende annuïteit doorgeven aan het hoofdprogramma. Dat betekent dat ook de annuïteit een parameter is. Daarbij gaat het niet om een waarde die vanuit het hoofdprogramma naar het subprogramma gaat, maar om een gegeven dat het subprogramma voor het hoofdprogramma berekent. Het subprogramma kent in totaal vier parameters.

Er zijn twee soorten parameters:

Die twee soorten parameters zien we terug in de call-opdracht. Voor het gegeven voorbeeld van de annuïteitsberekening schrijven we:

call "annuiteitsberekening"
    using 
    by content   bedrag, percentage, aantal-jaren
    by reference annuiteit
  

Het programma dat wordt aangeroepen heet annuiteitsberekening. Er zijn vier parameters. Van de drie parameters achter by content, krijgt het subprogramma alleen de inhoud (Engels: content). Van de variabele achter by reference krijgt het subprogramma een verwijzing (Engels: reference). Die verwijzing is de plaats in het geheugen waar de variabele zich bevindt: het adres van de variabele. Het subprogramma gebruikt voor die variabele dezelfde geheugenruimte als het hoofdprogramma. In het voorbeeld van deze paragraaf plaatst het subprogramma een waarde op de geheugenplaats die de uitkomst vormt van een berekening. Als het subprogramma klaar is, hoeft het hoofdprogramma alleen maar op de betrokken geheugenplaats te kijken en hij ziet wat het subprogramma heeft berekend.

Samenvattend

Als het subprogramma over een waarde moet beschikken en het is niet de bedoeling dat die waarde wordt veranderd, gebruik dan by content. Als het subprogramma een waarde moet wijzigen of een nieuwe waarde moet teruggeven, gebruik dan by reference. Variabelen die het subprogramma niet wijzigt, mogen we ook wel by reference overdragen, maar door by content te schrijven ontstaat er een waarborg dat de variabele onveranderd blijft. Bovendien is daarmee aangegeven wat de bedoeling is en dat komt de duidelijkheid van een programma ten goede.

Als voor een parameter geen van beide vormen (by content of by reference) is vermeld, dan neemt de compiler aan dat by reference bedoeld is. Dat is de zogenaamde verstekwaarde (Engels: default value).

Elke parameter die in een call-opdracht voorkomt, moet een elementair veld zijn, of een groepsveld op 01-niveau. Een groepsveld met niveaunummer 03 bij voorbeeld, kan niet als parameter deelnemen.

omslag leerboek

Serie: leerboeken informatica

Titel: Tijd voor COBOL 1

Auteur: Andree Hollander

naamlogo