====== 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 liste'' der 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 | ---- {{tag>M323-LU07 M323-D1B}} [[https://creativecommons.org/licenses/by-nc-sa/4.0/ch/|{{https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png}}]] (c) Kevin Maurizi