Staying DRY
Gut, dass unser Abenteurer im letzten Kapitel trocken geblieben ist. Damit sind auch wir als Programmiererinnen und Programmierer gut beraten. Don't repeat yourself (DRY) ist nämlich eine der wichtigsten Qualitätsregeln beim Programmieren. Doch was genau meinen wir damit?
Gehen Sie dazu am besten nochmal 👉 zurück zum vorherigen Kapitel und schauen Sie sich die Zeilen 10
und 24
genau an. Was fällt Ihnen auf?
Sie werden feststellen, dass die beiden Zeilen identisch sind. Wir wiederholen uns also. Die beiden Zeilen sind nicht nur genau gleich, sondern sie erfüllen auch genau den gleichen Zweck: Sie informieren den Spieler darüber, dass seine Angabe ungültig war, und dass das Spiel damit deshalb vorbei ist. Diese unnötige Wiederholung macht unseren Code nicht nur unübersichtlicher, sondern ist zudem auch eine Fehlerquelle. Was passiert zum Beispiel, wenn wir den Text für diesen Fall anpassen wollen? Wir müssen ihn mehreren Orten anpassen, und die Chance ist gross, dass wir es irgendwo vergessen.
In diesem Kapitel machen wir also nur eine einzige Anpassung: Wir verschieben die "Logik" für den Fall einer ungültigen Wahl in ihre eigene Funktion namens ungueltige_wahl()
.
def ungueltige_wahl():
print("Ungültige Wahl! Spiel vorbei!")
def fluss():
print("Du stösst auf einen Fluss. Du kannst schwimmen oder eine Brücke suchen.")
auswahl = input("Was möchtest du tun? (schwimmen/brücke): ")
if auswahl == "schwimmen":
print("Du wurdest von einem Krokodil angegriffen! Spiel vorbei!")
elif auswahl == "brücke":
print("Du hast eine versteckte Brücke gefunden und den Fluss sicher überquert.")
print("Du siehst eine Höhle vor dir.")
else:
ungueltige_wahl()
print("Willkommen beim Schatzsuche-Spiel!")
print("Du befindest dich in einem Wald. Du musst den versteckten Schatz finden.")
print("Du stehst an einer Wegkreuzung. Du kannst nach links, rechts oder geradeaus gehen.")
auswahl = input("In welche Richtung möchtest du gehen? (links/rechts/geradeaus): ")
if auswahl == "links":
fluss()
elif auswahl == "rechts":
print("Du begegnest einem Rudel Wölfe. Du kannst entweder rennen oder versuchen, sie zu zähmen.")
elif auswahl == "geradeaus":
print("Du gehst geradeaus und triffst auf eine Riesenspinne.")
else:
ungueltige_wahl()
Diese kleine Verbesserung hat noch einen weiteren hübschen Nebeneffekt: Der Code wird gleich viel "sprechender". Beispielsweise können wir die Zeilen 12
-13
praktisch als Satzfragment lesen: "else ungueltige wahl", also, "andernfalls ist das einen ungültige Wahl".