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 2: Conditie omkeren & vroeg afbreken

De slimste manier om guards te schrijven is de conditie omdraaien: check niet of alles goed is, maar check of iets fout is en breek direct af. De rest van de code blijft plat en leesbaar.

Check de fout, niet het succes

De truc van guard clauses is de conditie omdraaien: niet controleren of alles goed is, maar controleren of iets fout is en dan direct stoppen. Dit houdt je code plat en leesbaar.

Het probleem: geneste if-statements

Geneste structuren zorgen voor "arrow code" β€” code die steeds verder naar rechts wijst:

if value_a > 10:
    if value_b == True:
        if value_c < 50:
            result = "Succes!"
        else:
            result = "C te hoog"
    else:
        result = "B fout"
else:
    result = "A te laag"

print(result)

De oplossing: guard clauses

Met guards check je de fouten EERST en stopt je direct:

if value_a <= 10:
    print("A te laag")
    exit()

if value_b != True:
    print("B fout")
    exit()

if value_c >= 50:
    print("C te hoog")
    exit()

print("Succes!")
De regel: Draai de SUCCESS-voorwaarde om naar een FOUT-voorwaarde en stop direct.
if x > 10: (succes) wordt if x <= 10: exit() (guard).
>_ Interactieve Code Tester β€” Guard Clauses

Test hier guard clauses met een praktisch voorbeeld: het toelaten van iemand tot een evenement. Voltooi de # TODO-regels door guards in te voegen:

  1. Age-guard: stop als age < 18.
  2. Ticket-guard: stop als not ticket_purchased.
  3. Blacklist-guard: stop als on_blacklist.
  4. Onderaan op niveau 0: print("Welcome!").
Console: Klaar voor input…

Jouw opdracht: spaghetti-code platkoken

Herschrijf de geneste code hieronder naar losse guard clauses. Alle logica klopt, maar de structuur moet om: van ingesprongen naar plat. Het scenario: de drone doet zijn pre-flight check vlak voor het opstijgen.

from djitellopy import Tello

tello = Tello()
tello.connect()

battery = tello.get_battery()
height  = tello.get_height()
temp    = tello.get_highest_temperature()

if battery >= 20:
    if height == 0:
        if temp < 80:
            tello.takeoff()
        else:
            print("Drone te warm.")
    else:
        print("Drone staat niet op de grond.")
else:
    print("Batterij te laag.")

Acceptatiecriteria

  • Het script bevat precies drie losse guard clauses β€” geen geneste if/else meer.
  • Elke guard draait de conditie om: battery >= 20 wordt battery < 20.
  • Elke guard sluit netjes af met tello.end() en daarna exit().
  • Onderaan op indentatieniveau 0: tello.takeoff().
  • Je kunt uitleggen waarom de happy path altijd op niveau 0 staat.