Dies ist eine alte Version des Dokuments!
LU07.A06 - Unpure wird pure
Entfernen Sie den globalen Zustand aus einer kleinen Lagerverwaltung und trennen Sie Berechnung von Ein- und Ausgabe.
Ausgangslage
lager = {} protokoll = [] def einlagern(artikel, menge): global lager if artikel in lager: lager[artikel] += menge else: lager[artikel] = menge protokoll.append(f"+{menge} {artikel}") print(f"{artikel}: {lager[artikel]}") def entnehmen(artikel, menge): global lager if lager.get(artikel, 0) < menge: print("zu wenig Bestand") return False lager[artikel] -= menge protokoll.append(f"-{menge} {artikel}") return True
einlagern("maus", 5) einlagern("maus", 3) entnehmen("maus", 2) # True entnehmen("maus", 99) # False print(lager) # {'maus': 6}
Detaillierte Aufgabenstellung
- Schreiben Sie einen Test, der die obige Abfolge und ihr Endergebnis festhält.
- Bauen Sie einen funktionalen Kern: Funktionen, die den Bestand als Argument bekommen und einen neuen Bestand zurückgeben, ohne ihn zu mutieren und ohne
print. - Bauen Sie eine dünne Schale, in der Ausgabe und das Fortschreiben des Zustands stattfinden.
- Nach dem Umbau darf im Kern kein
global, keinprintund keine Mutation der Argumente vorkommen. - Belegen Sie mit Tests, dass der Kern pure ist: Zweimal derselbe Aufruf mit demselben Bestand liefert dasselbe Ergebnis, und der übergebene Bestand ist danach unverändert.
