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 2: Guards plat achter elkaar

Het patroon: controleer alle foutgevallen EERST, op niveau 0. Daarna weet je zeker dat alles veilig is.

Guard clauses: foutcheck eerst

Een guard clause is een voorwaarde die een foute waarde detecteert en onmiddellijk afsluit. Alle guards staan bovenaan, plat achter elkaar.

Zonder guards

if age >= 18:
    if has_license:
        if not banned:
            print("Mag rijden")
        else:
            print("Geblokkeerd")
    else:
        print("Geen rijbewijs")
else:
    print("Te jong")

Met guards

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

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

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

# Veilig bereikt
print("Mag rijden")

De controleflow met guards

Drie eenvoudige stappen: omgekeerde voorwaarde β†’ foutmelding β†’ direct stoppen.

if age < 18:              # 1. Omgekeerde logica (fout-case)
    print("Te jong")      # 2. Melding
    exit()                # 3. Stoppen

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

# Allemaal goed: de rest staat gewoon op niveau 0
print("Mag rijden")
Kernidee: Guards dwingen je om fouten EERST af te handelen. De rest van de code hoeft dan niet meer na te denken over die checks.

Interactieve demo

⚠️ Age < 18 β†’ Fout: Te jong. [exit()]
>_ Structuurcheck β€” staan je guards plat?

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 naar de vorm: staat elke guard op niveau 0, eindigt hij met exit(), heeft hij een melding, en staat de rest eronder zonder else?

Klik op de knop om je code te laten controleren.

Jouw opdracht: hoger vliegen

Je drone is opgestegen en hangt stil. Nu wil je hem een stuk laten stijgen: CLIMB centimeter, een constante die je bovenaan zet (begin met 100). Daarna zakt hij weer terug, landt en sluit de verbinding. Schrijf dit script in climb.py.

Voordat de drone stijgt, controleert het script vier regels. Faalt er één, dan krijgt de piloot een melding met de gemeten waarde en de grens, en landt de drone meteen.

RegelWanneer is het goed?
PlafondDe hoogte nΓ‘ het stijgen is hooguit 200 cm. Het lokaal is niet hoger.
BatterijMinstens 30%.
TemperatuurOnder 70 Β°C.
VliegtijdHooguit 180 seconden op deze accu.
De plafondregel is anders dan de rest. Die gaat niet over wat de drone nΓΊ meet, maar over waar hij straks is. Je hebt dus twee dingen nodig: de gemeten hoogte en je CLIMB.

Twee nieuwe drone-methodes

MethodeWat het doet
tello.move_up(x)Stijgt x cm (van 20 tot 500).
tello.move_down(x)Zakt x cm (van 20 tot 500).

Testen

Vervang voor elke test tijdelijk de metingen door vaste getallen, en zet ze daarna terug. CLIMB blijft 100. Noteer bij elke test welke guard afgaat, of dat de drone stijgt.

Testhoogtebatterijtemperatuurvliegtijd
180604030
2101604030
3100604030
480294030
580607030
6806040181

Test 2 en 3 schelen maar 1 cm. Welke van de twee mag stijgen? Klopt dat met je code?

Acceptatiecriteria

  • CLIMB en alle grenzen staan als UPPER_CASE-constanten bovenaan.
  • Vier guards, plat op niveau 0, elk voor één regel.
  • Elke melding is een f-string met de gemeten waarde Γ©n de grens.
  • Elke guard laat de drone landen en sluit de verbinding voordat het script stopt.
  • Alle zes testgevallen zijn gedraaid en de uitkomst staat genoteerd; alleen test 1 en 3 stijgen.