modul:m323:learningunits:lu07:loesungen:smelldetektiv

Action unknown: linkbutton

LU07.L01 - Smell-Detektiv

Nr. Smell Problem Technik
1 Kryptische Namen, Kommentar-Bedarf; zusätzlich if …: return True / return False b[„a“] und b[„s“] sagen nichts, die Bedingung muss entschlüsselt werden Rename, Extract Variable; die Bedingung direkt zurückgeben
2 Magic Numbers Woher kommen 2, 10, 7.0, 12.5, 24.9? Eine Preisänderung erfordert Suchen im Code Replace Magic Number with Named Constant, besser noch eine Tariftabelle als Datenstruktur
3 Lange Parameterliste Acht Parameter, beim Aufruf leicht zu vertauschen, Python meldet nichts Introduce Parameter Object (frozen Dataclass)
4 Query und Modifier vermischt Wer nur den Bestand lesen will, verändert dabei die Zugriffszähler; zwei Aufrufe haben verschiedene Wirkung Separate Query from Modifier
5 Schleife mit Akkumulator Beschreibt das Wie statt das Was, Zwischenvariable und append als Rauschen Replace Loop with Pipeline
6 Globaler Zustand (unpure function) Ergebnis hängt von der Programmgeschichte ab, nicht testbar ohne Zurücksetzen von zaehler Zustand als Parameter und Rückgabewert, alternativ Closure

Ausschnitt 1 enthält zwei Smells. Beide Antworten sind richtig, wenn sie begründet sind:

def ist_kaufberechtigt(kunde):
    volljaehrig = kunde["alter"] >= 18
    aktiv = kunde["status"] == 1
    hat_guthaben = kunde["guthaben"] > 0
    return volljaehrig and aktiv and hat_guthaben

Ausschnitt 2 wird oft als «verschachtelte Bedingungen» genannt - das stimmt hier nicht, die Guard Clauses sind bereits sauber. Der Smell sind die Zahlen.

Ausschnitt 5 ist der Smell mit dem stärksten Modulbezug:

namen = [k["name"].upper() for k in kunden if k["aktiv"]]

© Kevin Maurizi

  • modul/m323/learningunits/lu07/loesungen/smelldetektiv.txt
  • Zuletzt geändert: 2026/09/09 11:12
  • von admin