LU07.L02 - Technik-Steckbrief
Es gibt keine einzig richtige Auswahl. Die beiden folgenden Steckbriefe zeigen den erwarteten Detaillierungsgrad.
Beispiel 1: Extract Function
- Auslöser: Lange Funktion mit Abschnittskommentaren
- Zweck: Der herausgelöste Teil bekommt einen Namen und wird einzeln testbar; die aufrufende Funktion liest sich wie eine Zusammenfassung
- Preis: Mehr Funktionen, mehr Sprünge beim Lesen. Bei zu kleinen Schnitten («jede Zeile eine Funktion») wird es unübersichtlicher als vorher
# vorher def rechnung(positionen): total = 0 for p in positionen: total += p["menge"] * p["einzelpreis"] return f"Total: {round(total, 2)} CHF" # nachher def gesamtsumme(positionen): return round(sum(p["menge"] * p["einzelpreis"] for p in positionen), 2) def rechnung(positionen): return f"Total: {gesamtsumme(positionen)} CHF"
Beispiel 2: list durch set ersetzen
- Auslöser: Profiling zeigt, dass
x in listeder Hotspot ist - Zweck: Zugehörigkeitsprüfung von O(n) auf O(1); bei 10'000 Einträgen gemessen 0.107 s gegenüber 0.000068 s
- Preis: Reihenfolge geht verloren, Duplikate verschwinden, Elemente müssen hashbar sein. Kein Ersatz, wenn die Reihenfolge Teil der Fachlichkeit ist
# vorher gesperrt = [f"user{i}" for i in range(10000)] # nachher gesperrt = {f"user{i}" for i in range(10000)}
Bewertungshinweise
| Kriterium | Erfüllt, wenn |
|---|---|
| Zweck | benennt konkret, was einfacher wird, nicht «sauberer» |
| Vorher/Nachher | beide Fassungen lauffähig und mit gleichem Ergebnis |
| Preis | ein realer Nachteil, nicht «keiner» |
| Performance-Massnahmen | mit gemessener Zahl, nicht mit Behauptung |
| Funktionaler Bezug | mindestens eine Technik betrifft Pipeline, pure oder immutable |
