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?

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)
  1. Führen Sie jedes Paar aus, bevor Sie urteilen. Zwei der Fälle sind nur durch Ausprobieren sicher zu erkennen.
  2. Schreiben Sie für jede gefundene Verhaltensänderung den Test, der sie aufgedeckt hätte.
  3. Formulieren Sie für Paar 5 die Bedingung, unter der es tatsächlich ein Refactoring ist.

© Kevin Maurizi

  • modul/m323/learningunits/lu07/aufgaben/review.txt
  • Zuletzt geändert: 2026/09/09 11:18
  • von admin