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 1: Herhaling op meerdere plekken

Dezelfde code drie keer betekent drie mogelijke bugs. DRY-principe: Don't Repeat Yourself.

Dezelfde code op meerdere plekken

Je schrijft een script dat temperaturen valideert. Geldige waarde: 0–100 graden. Je schrijft deze check drie keer:

temp1 = 45
temp2 = 85
temp3 = 120

# Plek 1 — sensor 1
if temp1 < 0 or temp1 > 100:
    print("Temperatuur ongeldig")

# ... 30 regels code ...

# Plek 2 — sensor 2
if temp2 < 0 or temp2 > 100:
    print("Temperatuur ongeldig")

# ... 30 regels code ...

# Plek 3 — sensor 3
if temp3 < 0 or temp3 > 100:
    print("Temperatuur ongeldig")

Drie concrete problemen

  1. Wijzigen = veel werk. Stel bereik moet 10–95 zijn. Pas drie plekken aan.
  2. Fouten worden mee gekopieerd. Typfout op plek 1 → door copy-paste staat hij ook op plek 2 en 3.
  3. Inconsistentie groeit. Na maanden weet je niet meer: zijn alle kopieën gelijk?
😩 Drie kopieën (probleem)
if temp1 < 0 or temp1 > 100:
    print("Ongeldig")

# ... code ...

if temp2 < 0 or temp2 > 100:
    print("Ongeldig")

# ... code ...

if temp3 < 0 or temp3 > 100:
    print("Ongeldig")
✨ Eén functie (oplossing)
def is_valid(t):
    return 0 <= t <= 100

if not is_valid(temp1):
    print("Ongeldig")
if not is_valid(temp2):
    print("Ongeldig")
if not is_valid(temp3):
    print("Ongeldig")

Interactieve demo

Hoeveel regels bespaar je? Typ op hoeveel plekken dezelfde code staat en druk op Enter:

besparing_calculator.py
Voer getal in tussen 2 en 10
$
Bijvoorbeeld: 3 betekent dezelfde code op 3 plekken
Vuistregel: Zie je dezelfde code meer dan eens? Maak er een functie van. Dit is het DRY-principe: Don't Repeat Yourself.
>_ Probeer het voorbeeld

Drie servers, drie keer dezelfde controle. Draai het voorbeeld en kijk naar de uitvoer.

Probeer daarna: de grens moet van 90 naar 80. Op hoeveel plekken moet je iets aanpassen? En wat gebeurt er als je er één vergeet?

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

Opdracht: Duplicatie herkennen — en de fout erin vinden

Scenario: een collega heeft een script geschreven dat drie logbestanden controleert (access.log, error.log, debug.log). De controle is twee keer gekopieerd. Het script draait zonder foutmelding — toch zit er een fout in. Zet de code in log_check.py en draai hem.

access_log = ["GET /", "POST /api", "GET /home"]
error_log = ["Error 500", "Timeout", "Connection refused"]
debug_log = ["Debug: starting", "Debug: loaded config"]

# Validatie access.log
print("Check access_log...")
if not access_log:
    print("Log is leeg")
elif len(access_log) > 1000:
    print("Log is te lang")
else:
    print("Access log OK")

# Validatie error.log
print("Check error_log...")
if not error_log:
    print("Log is leeg")
elif len(error_log) > 1000:
    print("Log is te lang")
else:
    print("Error log OK")

# Validatie debug.log
print("Check debug_log...")
if not debug_log:
    print("Log is leeg")
elif len(error_log) > 1000:
    print("Log is te lang")
else:
    print("Debug log OK")

Wat je moet doen: zet je antwoorden als commentaar bovenaan log_check.py. Je hoeft de code nog niet te herschrijven — dat doe je in taak 2.

Acceptatiecriteria:

  • Je noemt welk blok op drie plekken terugkomt en hoeveel regels het telt
  • Je hebt de kopieerfout gevonden en legt uit waarom je hem niet aan de uitvoer ziet
  • Je hebt een manier bedacht om de fout zichtbaar te maken in de uitvoer (andere lijstinhoud of een andere grens), en die getest
  • Je noteert op hoeveel plekken je iets moet aanpassen als de grens van 1000 naar 30 gaat
  • Je geeft twee redenen waarom deze manier van werken fouten uitlokt