Sprint 5 · Functies & scope  ·  US1: DRY & functies

Als developer, wil ik code die ik vaker nodig heb één keer opschrijven in een functie, zodat ik een wijziging op één plek doe en een fout niet op drie plekken tegelijk zit.

Taak 3: Call stack & return values

Hoe Python functies aanroept en hoe return values door elkaar doorgegeven worden.

Functies meerdere keren gebruiken

Je hebt nu functies geleerd. Volgende stap: dezelfde functie meerdere keren aanroepen in hetzelfde programma.

Probleem: zonder functies

Stel: je wilt 3 getallen controleren:

# Herhaalde logica
if temp1 < 0 or temp1 > 100:
    print("ERROR: temp1 ongeldig")
else:
    print("OK: temp1")

if temp2 < 0 or temp2 > 100:
    print("ERROR: temp2 ongeldig")
else:
    print("OK: temp2")

if temp3 < 0 or temp3 > 100:
    print("ERROR: temp3 ongeldig")
else:
    print("OK: temp3")

Probleem: 15 regels code voor 3 controles. Bug op één plek = bug op drie plekken.

Oplossing: functie 1x definiëren, 3x aanroepen

def check_temp(value):
    if value < 0 or value > 100:
        print("ERROR: ongeldig")
    else:
        print("OK")

# Aanroepen
check_temp(temp1)
check_temp(temp2)
check_temp(temp3)

Voordeel: 6 regels logica + 3 aanroepen = 9 regels. Eenmaal schrijven, drievoudig gebruiken.

Interactieve demo: aanroep-volgorde

Wat gebeurt er stap voor stap? Klik "Volgende stap" om te zien:

call_demo.py
Code:
def add(a, b):
    return a + b

result = add(5, 3)
print(result)
Stap voor stap:
Vuistregel: definieer een functie één keer en roep hem zo vaak aan als je nodig hebt. Tien aanroepen kosten tien regels plus één definitie. Tien kopieën van vier regels kosten er veertig — en een fout zit dan op tien plekken.
>_ Probeer het voorbeeld

Een keten van functies: de uitkomst van de ene is de invoer van de volgende. Onderaan staat een functie zonder return.

Probeer daarna: zet broken_double() in het midden van de keten. Wat komt er dan uit?

Klik op de knop om de uitvoer van het voorbeeld te zien.

Opdracht: Data-verwerkingspijplijn

Scenario: een webserver schrijft logregels. Elke regel bestaat uit drie delen, gescheiden door een |: het tijdstip, het niveau (INFO, ERROR of DEBUG) en een bericht. Jij schrijft een kleine pijplijn van drie functies: regel opknippen → niveau beoordelen → een nette uitvoerregel maken.

Gegeven:

entry = "2025-07-28 10:45:23|ERROR|Database connection failed"

def parse_log(text):
    # TODO
    pass

def is_error(level):
    # TODO
    pass

def format_result(parts):
    # TODO
    pass

Acceptatiecriteria:

  • parse_log() geeft een lijst terug met drie onderdelen: tijdstip, niveau en bericht
  • is_error() geeft True bij het niveau ERROR en False bij elk ander niveau
  • format_result() geeft één regel terug: een ALERT-regel bij een fout, een OK-regel bij de rest — met tijdstip en bericht erin
  • De uitkomst van de ene functie is de invoer van de volgende; er staan geen gekopieerde stukken code tussen
  • Alleen het hoofdscript print — de drie functies geven hun uitkomst terug