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.
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.
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.
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)
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!")
if x > 10: (succes) wordt if x <= 10: exit() (guard).
Test hier guard clauses met een praktisch voorbeeld: het toelaten van iemand tot een evenement.
Voltooi de # TODO-regels door guards in te voegen:
age < 18.not ticket_purchased.on_blacklist.print("Welcome!").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
if/else meer.battery >= 20 wordt battery < 20.tello.end() en daarna exit().tello.takeoff().