LU02.A02 - Refactoring unpure -> pure
Sie haben eine Funktion, die in einem E-Commerce-System verwendet wird, um den Gesamtpreis eines Warenkorbs zu berechnen und einen Rabatt anzuwenden. Die vorhandene Funktion ist unpure, da sie globale Variablen verwendet und direkt den Gesamtpreis ausdruckt. Ihre Aufgabe ist es, diese Funktion in eine pure Funktion umzuwandeln.
Anleitung in Schritten
- Untersuchen Sie die vorhandene unpure function und identifizieren Sie die Seiteneffekte und die Verwendung globaler Variablen.
- Erstellen Sie eine neue pure function, die alle benötigten Informationen als Argumente erhält.
- Die neue Funktion sollte alle Berechnungen durchführen und das Ergebnis zurückgeben, ohne den Gesamtpreis direkt auszudrucken.
- Testen Sie die neue Funktion mit verschiedenen Eingaben, um sicherzustellen, dass sie korrekt funktioniert.
BASKET = [{'Produkt': 'T-Shirt', 'Preis': 20}, {'Produkt': 'Hose', 'Preis': 50}] DISCOUNT = 0.1 # Unpure function def calculate_total_unpure(): global BASKET, DISCOUNT total = sum(item['Preis'] for item in BASKET) discount = total * DISCOUNT total = total - discount print("Gesamtpreis:", total) return total # Pure function if __name__ == "__main__": print("Unpure function:") calculate_total_unpure() print("Pure function:") total = calculate_total_pure(#TODO) print("Gesamtpreis:", total)
Die Funktion calculate_total_unpure
wird als unrein angesehen aus folgenden Gründen:
- Abhängigkeit vom globalen Zustand: Die Funktion greift auf zwei globale Variablen zu,
BASKET
undDISCOUNT
. Das bedeutet, dass ihr Verhalten sich abhängig vom Zustand dieser globalen Variablen ändern kann, was sie kontextabhängig macht. - Seiteneffekte: Die Funktion gibt den Gesamtpreis mit
print
aus, was ein Seiteneffekt ist. Eine reine Funktion sollte nur einen Wert zurückgeben und keine Seiteneffekte wie das Ausgeben auf der Konsole, das Ändern des globalen Zustands oder das Interagieren mit externen Systemen haben. - Modifikation des globalen Zustands: Obwohl diese spezifische Funktion die globalen Variablen nicht modifiziert, ist sie dennoch abhängig von ihnen, und jede Änderung dieser globalen Variablen außerhalb der Funktion beeinflusst das Ergebnis. Diese Abhängigkeit von einem externen veränderlichen Zustand macht die Funktion unrein.
Zusammenfassung
Durch die Umwandlung der unpure function in eine pure function haben Sie eine bessere Trennung von Bedenken erreicht und die Testbarkeit der Funktion verbessert. Die neue Funktion ist jetzt unabhängig von globalen Zuständen und Seiteneffekten, was sie robuster und leichter zu verstehen macht.