Functies in BASIC

Home / Programmeren / Basic / Functies

Soms moeten stukjes code vaak uitgevoerd worden, maar dan niet net als een lus een aantal keer achter elkaar. Je hebt ze verspreid over het hele programma een aantal keer nodig. Dan zijn functies en subroutines handige hulpjes! Je kunt met beide een stukje programma apart maken en dat later gebruiken. Het enige verschil is dat een subroutines alleen iets kan doen (bijvoorbeeld iets op het scherm zetten), en een functie kan ook nog een waarde terugsturen.

De subroutine

In de beginnerstutorials heb ik al even uitgelegd wat een subroutine is, alleen noemde ik het daar een functie. Deze lijken veel op elkaar. Lees hiervoor de paragraaf 'Naamsverwarring met andere talen' hieronder. Met een subroutine kun je code zetten die je overal in het programma kunt gebruiken. Deze heeft hiervoor parameters nodig. Dat is een variabele die je doorgeeft waarmee de subroutine iets moet doen. Heb je bijvoorbeeld een subroutine die een lijn op het scherm zet, dan moet je als parameter doorgeven waar die lijn moet beginnen, hoelang hij is en in welke richting hij gaat.

Subroutines staan normaal gesproken helemaal onderaan het programma. Als je werk met QBASIC for DOS dan kun je via Bewerken -> Nieuwe SUB een nieuwe subroutine aanmaken. Dat komt er dan zo uit te zien:

SUB naamvandezesubroutine (parameter$)
END SUB

Je ziet 2 regels staan. Allereerst het woordje SUB, wat aangeeft dat hier een subroutine begint. Daarachter staat naamvandezesubroutine. Daar komt dus de naam van de subroutine te staan. Daarachter staat tussen haakjes parameter$. Dat is de naam van de parameter die wordt doorgegeven. Zoals je ziet is de parameter van het type string. Je kunt overigens ook subroutines maken zonder parameters, je moet dan niets tussen de haakjes zetten. END SUB geeft aan dat daar de subroutine eindigt.

De vorige subroutine deed niets en was een beetje simpel, dus maken we hem iets moeilijker:

SUB eensubroutine (parameter1$, parameter2%)
PRINT "De subroutine wordt gestart"
PRINT "De meegeleverde parameter: "; parameter1$
PRINT "De andere parameter: "; parameter2%
END SUB

Dit werkt op precies op dezelfde manier, alleen zet deze subroutine 3 regels op het scherm, en krijgt 2 parameters aangeleverd. Zoals je ziet moeten deze gescheiden worden door komma's.

Allemaal heel leuk en aardig, maar nu moet je ze nog gebruiken. Je moet aangeven wanneer de subroutine in het programma gestart moet worden. Dit kan op 2 manieren:

CALL eensubroutine ("DeEersteParameter",5574)
eensubroutine "DeEersteParameter",5574

Je mag zelf kiezen welke je het makkelijkst vind, maar vergeet niet dat er 2 manieren zijn! Je ziet dat je zowiezo de naam van de subroutine moet weten om hem "te roepen", en je moet de parameters doorgeven. Hierbij is "DeEersteParameter" de eerste parameter. Dat klopt, want de eerste parameter moest een tekenreeks zijn! De 2e parameter is 5574, een getal.

De functie

De functie werkt in veel opzichten hetzelfde als de subroutine, alleen roep je hem op een andere manier aan.

FUNCTION kwadraat (parameter%)
kwadraat = parameter% * parameter%
END FUNCTION

PRINT kwadraat(5)
getal% = kwadraat(43)

Let hierbij op dat de waarde die teruggegeven wordt de variabele is die dezelfde naam heeft als de functie. Als je functie dus eenfunctie heet, dan is de waarde die op het scherm gaat de inhoud van de variabele eenfunctie.

Naamsverwarring met andere talen

BASIC wijkt helaas op het gebied van functies en subroutines op een vreemde manier af van andere programmeertalen. Vrijwel alle programmeertalen kennen alleen de functie, de subroutine is typisch iets voor BASIC. In andere talen kun je namelijk ook een subroutine maken met een functie waarin je geen waarde teruggeeft. Let hierop als je overstapt op een andere taal.