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