LU07.A10 - Refactoring-Review
Sechs Kolleginnen und Kollegen behaupten, ein Refactoring gemacht zu haben. Prüfen Sie: Stimmt das? Bei welchen hat sich das Verhalten heimlich geändert?
Detaillierte Aufgabenstellung
Beurteilen Sie jedes Paar. Notieren Sie: echtes Refactoring oder Verhaltensänderung - und im zweiten Fall, welcher Aufrufer davon betroffen wäre.
Paar 1
# vorher def sortierte_namen(namen): kopie = list(namen) kopie.sort() return kopie # nachher def sortierte_namen(namen): return namen.sort()
Paar 2
# vorher werte = [n * n for n in range(1000)] print(sum(werte), max(werte)) # nachher werte = (n * n for n in range(1000)) print(sum(werte), max(werte))
Paar 3
# vorher def sammeln(x, ziel=None): ziel = [] if ziel is None else ziel ziel.append(x) return ziel # nachher def sammeln(x, ziel=[]): ziel.append(x) return ziel
Paar 4
# vorher aktive = [] for k in kunden: if k["aktiv"]: aktive.append(k) # nachher aktive = [k for k in kunden if k["aktiv"]]
Paar 5
# vorher def zuordnen(bestellungen, kunden): return [(k["name"], b["betrag"]) for b in bestellungen for k in kunden if k["id"] == b["kunde_id"]] # nachher def zuordnen(bestellungen, kunden): index = {k["id"]: k for k in kunden} return [(index[b["kunde_id"]]["name"], b["betrag"]) for b in bestellungen]
Paar 6
# vorher def hat_treffer(eintraege, gesucht): return len([e for e in eintraege if e["id"] == gesucht]) > 0 # nachher def hat_treffer(eintraege, gesucht): return any(e["id"] == gesucht for e in eintraege)
Schritt-für-Schritt-Anleitung
- Führen Sie jedes Paar aus, bevor Sie urteilen. Zwei der Fälle sind nur durch Ausprobieren sicher zu erkennen.
- Schreiben Sie für jede gefundene Verhaltensänderung den Test, der sie aufgedeckt hätte.
- Formulieren Sie für Paar 5 die Bedingung, unter der es tatsächlich ein Refactoring ist.
