Ga naar hoofdinhoud

Functies in functies

Leerdoel: je roept binnen een eigen functie een andere eigen functie aan. Daarmee bouwen de volgende bouwstenen op elkaar voort.

Tot nu toe

Op functies werken samen zag je dat functies stapelen bij de aanroep:

print(plus_drie(verdubbel(5)))

Dat is prima voor een losse aanroep. Maar wil je steeds "eerst verdubbelen, dan plus drie", dan typ je dat patroon elke keer opnieuw. Maak er dan één eigen functie van.

Een functie die een andere functie aanroept

def verdubbel(x):
return x * 2

def plus_drie(x):
return x + 3

def doe_alletwee(x):
return plus_drie(verdubbel(x))

doe_alletwee is een nieuwe functie die in zijn body twee eerder gedefinieerde functies aanroept. Vanaf nu schrijf je doe_alletwee(5) in plaats van het patroon te herhalen.

Voorspel

Wat denk je dat dit print?

def begroet(naam):
return f"Hallo {naam}!"

def begroet_drie_keer(naam):
return begroet(naam) + " " + begroet(naam) + " " + begroet(naam)

print(begroet_drie_keer("Lotte"))
Antwoord
Hallo Lotte! Hallo Lotte! Hallo Lotte!

begroet_drie_keer roept begroet drie keer aan en plakt de resultaten aan elkaar met spaties ertussen.

Run

Python
Code-omgeving wordt voorbereid…

Waarom is dit handig?

De logica staat één keer, in begroet. Wil je "Hallo" veranderen in "Hoi", dan pas je begroet aan en elke functie die hem aanroept doet meteen mee. Programmeurs noemen dat DRY, don't repeat yourself.

Het leest ook makkelijker: begroet_drie_keer(naam) zegt wat hij doet, en de details zitten in begroet. Zo bouw je in lagen. Een groot programma is niets anders dan lagen van functies die elkaar gebruiken, en je tic-tac-toe-AI straks ook.

Wat we hierna gaan doen

In de volgende bouwsteen, result(bord, zet), moet je weten wie de zet doet, X of O. Dat heb je al: player(bord) uit bouwsteen 2 zegt precies wie aan de beurt is. Dus schrijf je:

def result(bord, zet):
...
speler = player(bord) # ← je eigen functie aanroepen
...

Geen nieuwe telling en geen kopie van de logica: je roept player(bord) aan en gebruikt het antwoord. Zo gaat het de rest van dit hoofdstuk.

Door naar bouwsteen 4: result →.