Als developer van het vliegscript, wil ik mijn dronecode opdelen in kleine helpers in een eigen module, zodat mijn hoofdscript kort en leesbaar blijft en ik de helpers kan testen zonder dat de drone opstijgt.
Waarom grote scripts lastig worden en hoe je dit oplost.
Naarmate scripts groeien, worden ze lastig te hanteren. Alles op één hoop leidt tot problemen.
# payroll.py — alles in één bestand
def load_employees():
... # 20 regels: gegevens klaarzetten
def is_valid_email(email):
... # 15 regels: controles
def calculate_salary(hours, rate):
... # 15 regels: berekeningen
def format_payslip(name, salary):
... # 30 regels: loonstrook opmaken
def send_notification(email, text):
... # 25 regels: bericht versturen
# Hoofdlogica
employees = load_employees()
for employee in employees:
if is_valid_email(employee["email"]):
salary = calculate_salary(employee["hours"], employee["rate"])
payslip = format_payslip(employee["name"], salary)
send_notification(employee["email"], payslip)
validate_email in ander script? Copy-paste...Een klein programma waarin helpers en uitvoercode nog in één bestand staan. Straks knip je dit op in modules; nu kijk je eerst wat er allemaal in zit.
Probeer daarna: zet een streep (# ----) tussen de delen die bij
elkaar horen. Hoeveel onderwerpen tel je?
Scenario: een klasgenoot heeft een script geschreven dat de drone een vierkant laat vliegen. Het werkt, maar constanten, controles, vliegbewegingen en de opstartcode staan door elkaar in één bestand. Jij knipt het op, zodat de controles te gebruiken zijn zonder drone. Daarna vlieg je het vierkant opnieuw, om te bewijzen dat er niets kapot is gegaan.
Gegeven:
# square_flight.py — alles in één bestand
from djitellopy import Tello
MIN_BATTERY = 30
SIDE = 60
def battery_ok(battery):
return battery >= MIN_BATTERY
def format_status(battery, height):
return f"Accu: {battery}% (min: {MIN_BATTERY}%) | hoogte: {height} cm"
def fly_square(tello, side):
for i in range(4):
tello.move_forward(side)
tello.rotate_clockwise(90)
tello = Tello()
tello.connect()
battery = tello.get_battery()
print(format_status(battery, tello.get_height()))
if battery_ok(battery):
tello.takeoff()
fly_square(tello, SIDE)
print(format_status(tello.get_battery(), tello.get_height()))
tello.land()
else:
print("Niet opgestegen: accu te laag")
Je taak: verdeel dit script over vier bestanden: één voor de constanten, één voor de controles, één voor de vliegbewegingen en een hoofdscript. Bepaal zelf de bestandsnamen en welke functie waar hoort.
Acceptatiecriteria:
def, en importeert alleen wat het echt gebruikt