Sprint 2 Β· Beslissingen  Β·  US3: Guard clauses in de drone

Als piloot, wil ik dat het script vΓ³Γ³r het opstijgen alle onveilige situaties afvangt en met de gemeten waarde meldt wat er mis is, zodat de drone alleen vliegt als het veilig kan en ik meteen zie waarom hij weigert.

Taak 1: Guard clause β€” bescherm je code

Wat gebeurt er als je de drone laat opstijgen zonder de batterij te controleren? In dit moment laten we het misgaan β€” zodat je begrijpt waarom de check noodzakelijk is.

Guard clause β€” wat is het?

Een guard clause is een if-statement dat vroeg uit de functie/script springt als iets niet klopt.

Patroon

value = get_value()

if value < 20:              # ← guard: controleer vΓ³Γ³r je verder gaat
    print("Te laag!")
    exit()                  # ← stop direct

# Alleen hier als value >= 20
do_important_action()

Drie onderdelen:

  1. Controleer de voorwaarde
  2. Als fout: geef melding en stop (met exit())
  3. De rest van het script voert alleen uit als de check geslaagd is
Voordeel: Je hoeft niet in een if/else-blok te denken. In plaats daarvan zeg je: "Als X niet klopt, stop. Anders, ga door."

Live demo: wat gebeurt zonder guard

Stel de parameters in en klik op een knop…
>_ REPL simulatie: wat gaat mis zonder guard

Typ check <value> [value2] en zie wat de guards zouden doen. Probeer: check 10, check 50, check 100 8.

guard_test.py
Typ 'check <value>' en druk Enter…
$

Jouw opdracht: schrijf je eerste guard clause

Herschrijf het script hieronder zodat de drone alleen opstijgt als de batterij hoog genoeg is. Voeg een guard clause toe die het script stopt bij <20%.

from djitellopy import Tello

tello = Tello()
tello.connect()
battery = tello.get_battery()

# TODO: voeg guard clause toe
# Als battery < 20: print een melding en stop

tello.takeoff()
tello.move_forward(100)
tello.land()
tello.end()

Acceptatiecriteria

  • Guard clause aanwezig: if battery < 20:
  • Melding geeft de werkelijke batterijstand: f"Batterij te laag: {battery}%".
  • Guard eindigt met exit() β€” script stopt daar.
  • tello.takeoff() staat na de guard op indentatieniveau 0.
  • Getest met battery = 10 (stopt) en battery = 25 (gaat verder).