De functiemachine
Een functie is een machine: je stopt er iets in, en er komt iets uit. In dit rollenspel is elke functie een leerling. Je ziet dan precies wat er heen gaat, wat er terugkomt, en wat er alleen op het scherm komt.
Wat je nodig hebt
- Een groepje van vijf, met deze rollen: het hoofdprogramma,
verdubbel,toon_dubbel,plus_eenen het scherm. - Per rol een kladblaadje, en een stapel briefjes en een pen voor iedereen.
- Ongeveer 25 minuten.
De spelregels
- Een aanroep zoals
verdubbel(4): wie aanroept, schrijft de 4 op een briefje en geeft het aanverdubbel. Daarna wacht hij, en doet niets tot hij iets terugkrijgt. - De functie schrijft op haar eigen kladblaadje:
getal = 4. Dat is haar parameter. Niemand anders kijkt op dat kladblaadje. return: de functie schrijft de uitkomst op een briefje en geeft het terug. Daarna is ze klaar, en gooit ze haar kladblaadje weg.print: de functie roept het hardop naar het scherm. Het scherm schrijft het op het bord. Er gaat niets terug naar wie aanriep.- Geen
return? Dan geeft de functie aan het eind een leeg briefje terug. Python schrijft daarNoneop.
Ronde 1
def verdubbel(getal):
return getal * 2
def toon_dubbel(getal):
print(getal * 2)
def plus_een(getal):
return verdubbel(getal) + 1
a = verdubbel(4)
b = toon_dubbel(4)
c = plus_een(5)
print(a, b, c)
Gok eerst wat er op het scherm komt: ______
Speel het nu. Het hoofdprogramma begint bovenaan bij a = …. Vul per
aanroep een rij in.
| Aanroep | Briefje heen | Briefje terug | Op het scherm |
|---|---|---|---|
verdubbel(4) | |||
toon_dubbel(4) | |||
plus_een(5) | |||
verdubbel(…), door plus_een | |||
print(a, b, c) |
Ronde 2: wiens kladblaadje?
def tel_op(getal):
totaal = getal + 10
return totaal
totaal = 1
uitkomst = tel_op(5)
print(totaal, uitkomst)
Gok eerst: ______ Speel het daarna. Het hoofdprogramma schrijft totaal
op zijn eigen kladblaadje, tel_op ook.
Bespreek na
toon_dubbelliet 8 op het scherm komen. Waarom staat er dan inbgeen 8?- Terwijl
verdubbelwerkte voorplus_een, wie stond er toen te wachten, en op wie? - In ronde 2 bestaat
totaaltwee keer. Waarom raakt het ene het andere niet?
Antwoorden
Ronde 1. toon_dubbel roept 8 naar het scherm en geeft een leeg
briefje terug. plus_een geeft 5 aan verdubbel, wacht op de 10, en
geeft 11 terug. Het hoofdprogramma wacht ondertussen op plus_een.
def verdubbel(getal):
return getal * 2
def toon_dubbel(getal):
print(getal * 2)
def plus_een(getal):
return verdubbel(getal) + 1
a = verdubbel(4)
b = toon_dubbel(4)
c = plus_een(5)
print(a, b, c)
Uitvoer:
8
8 None 11
De eerste 8 roept toon_dubbel. In b staat None: het lege briefje.
Ronde 2. Elke functie heeft haar eigen kladblaadje. De totaal van
tel_op staat op een ander blaadje dan die van het hoofdprogramma, en dat
blaadje gaat weg zodra de functie klaar is.
def tel_op(getal):
totaal = getal + 10
return totaal
totaal = 1
uitkomst = tel_op(5)
print(totaal, uitkomst) # 1 15
Verder op de site
- In de les: 8 Functies, 9a Parameters, 9b Return en 9c Scope.
- In het project Tien groene flessen
roept de ene functie de andere aan, net als
plus_eenhier.