Sprint 4 ยท Datastructuren & foutafhandeling  ยท  US3: Dispatch-dict

Als developer, wil ik een lange if/elif-keten vervangen door รฉรฉn tabel van keuzes, zodat ik een commando kan toevoegen zonder de rest van mijn code aan te raken.

Taak 1: Lange if/elif-ketens

Twaalf elif's na elkaar? Dat wordt onleesbaar. Dit is het moment voor een betere structuur.

Het probleem: lange if/elif-ketens

Veel code moet veel keuzes maken. Gebruik je if/elif/elif/elif... voor alles, dan wordt het onleesbaar.

Het probleem zichtbaar gemaakt

log_level = user_input
if log_level == "debug":
    set_debug()
elif log_level == "info":
    set_info()
elif log_level == "warning":
    set_warning()
elif log_level == "error":
    set_error()
elif log_level == "critical":
    set_critical()
# ... veel meer elif's

De problemen

  • Onleesbaar: veel herhaalde structuur, hard te volgen
  • Moeilijk aanpassen: commando toevoegen? Ergens een elif tussenvoegen
  • Foutgevoelig: gemakkelijk dubbel controleren of vergeten

De oplossing: dictionary

levels = {
    "debug": set_debug,
    "info": set_info,
    "warning": set_warning,
    "error": set_error,
    "critical": set_critical,
}

if user_input in levels:
    levels[user_input]()

Interactieve demo: voeg een case toe

Elke klik voegt een nieuw log-level toe. Kijk hoe de twee aanpakken van grootte verschillen.

โŒ If/elif
Regels: 2
โœ… Dictionary
Regels: 1
Vuistregel: Meer dan 3-4 elif's? Denk aan een dictionary of een ander pattern.
>_ Probeer het voorbeeld

Experimenteer: if/elif vs dictionary dispatch.

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

Opdracht: drone commando's met dictionary

Je drone krijgt commando's binnen als tekst. In plaats van een lange if/elif-keten gebruik je รฉรฉn dictionary. Bestand: drone_commands.py

  1. Maak รฉรฉn dictionary met minstens zes commando's als sleutel: "takeoff", "land", "forward", "back", "left" en "right".
  2. De waarde bij elke sleutel is de melding die de piloot te zien krijgt, bijvoorbeeld "Drone stijgt op".
  3. Zet minstens zes binnengekomen commando's in een lijst en verwerk ze met รฉรฉn lus โ€” met ook een paar onbekende ertussen.
  4. Zoek elk commando op met .get() en een duidelijke fallback, zodat een typfout je script niet laat crashen.
  5. Tel hoeveel commando's er herkend zijn en hoeveel niet, en print dat aan het eind.

Acceptatiecriteria

  • Eรฉn dictionary met minstens zes commando's, bovenaan het script.
  • Er staat geen enkele if/elif-keten op de commando's โ€” het opzoeken doet de dictionary.
  • Het opzoeken gebruikt .get().
  • Een onbekend commando geeft een nette melding met het commando erin, en het script gaat gewoon door.
  • De telling van herkende en onbekende commando's klopt met de lijst die je erin stopte.