====== 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. ---- {{tag>M323-LU07 M323-D1A}} [[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