====== 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