Sprint 2 ยท Beslissingen  ยท  US4: Platte guards

Als developer van het vliegscript, wil ik alle veiligheidschecks plat onder elkaar zetten in plaats van ze diep in elkaar te nesten, zodat ik in รฉรฉn oogopslag zie welke checks er zijn en er zonder risico een bij kan zetten.

Taak 1: De diepe if-boom

Naarmate je meer voorwaarden toevoegt, groeit je if-statement steeds dieper. Dit heet de "pyramid of doom" โ€” code die onleesbaar wordt.

Het probleem: geneste if-statements

Als je meerdere voorwaarden moet checken, groeit je if-statement steeds dieper. De code wijst steeds verder naar rechts โ€” je wordt "in de pijl geschoten".

Genest (Pyramid)

if user_age >= 18:
    if has_license:
        if not banned:
            print("Toegang verleend")
        else:
            print("Geblokkeerd")
    else:
        print("Geen rijbewijs")
else:
    print("Te jong")

Plat (Guard)

if user_age < 18:
    print("Te jong")
    exit()

if not has_license:
    print("Geen rijbewijs")
    exit()

if banned:
    print("Geblokkeerd")
    exit()

print("Toegang verleend")

Nesting level: 1 โ€” schuif om te zien hoe diep het kan gaan

Het patroon: Elk extra if-niveau voegt รฉรฉn "tab in" toe. Met 4+ voorwaarden wordt het onleesbaar. Guards houden het plat.
>_ Structuurcheck โ€” hoe diep is je code?

Plak hier je eigen code en klik op de knop. De check voert je code niet uit โ€” daarvoor gebruik je Python op je eigen laptop. Hij kijkt alleen naar de vorm: hoe diep is het genest, en staan je guards plat met een exit()? Probeer eerst de voorbeeldcode, en herschrijf die daarna plat.

Klik op de knop om je code te laten controleren.

Jouw opdracht: doorvliegen of landen?

Je drone is net opgestegen en 100 cm vooruit gevlogen. Nu moet je script een beslissing nemen: nรณg 100 cm verder, of meteen landen? Hij mag alleen doorvliegen als alle drie deze regels kloppen:

  • de batterij is meer dan 40%;
  • de vliegtijd op deze accu is minder dan 120 seconden;
  • het wifi-signaal is minstens 60.

Klopt een regel niet, dan print het script wat er mis is โ€” met de gemeten waarde โ€” en landt de drone direct. Klopt alles, dan vliegt hij nog 100 cm vooruit en landt daarna. De verbinding sluit je altijd af.

Je schrijft dit twee keer:

  1. further_nested.py โ€” genest: elke regel is een if binnen de vorige, met een else die meldt en landt.
  2. further_flat.py โ€” plat: elke regel is een guard op niveau 0, en het doorvliegen staat onderaan.

Controleer beide versies met de structuurcheck hierboven.

In de lucht is stoppen niet genoeg. In US3 stopte een guard vรณรณr het opstijgen. Hier hangt de drone al. Stopt je script zonder te landen, dan blijft de drone boven je hoofd hangen tot de accu leeg is. Bedenk wat een guard hier moet doen vรณรณr exit().

Testen

Vervang voor elke test tijdelijk รฉรฉn meting door een vast getal, en zet hem daarna terug. Draai beide versies met deze vier gevallen en noteer wat er gebeurt:

Testbatterijvliegtijdwifi
1803090
2403090
38012090
4803059

Test 2, 3 en 4 liggen precies op de grens. Kijk goed in de regels hierboven: mag de drone dan door of niet?

Acceptatiecriteria

  • De geneste versie gaat minstens 3 niveaus diep: elke regel zit in de vorige.
  • In de platte versie staan alle checks op niveau 0 en staat het doorvliegen onderaan, zonder else.
  • In beide versies meldt een falende regel wat er mis is met de gemeten waarde, landt de drone en sluit de verbinding.
  • Beide versies geven bij de vier testgevallen precies dezelfde uitkomst.
  • Je kunt uitleggen in welke versie je makkelijker een vierde regel toevoegt, en waarom.