Ich finde Hardcoding (sic) jedes Mal, wenn ich eine leere Zeichenfolge überprüfe, nicht so gut.
Clean Code-Ansatz
Dies zu tun: foo == ""
ist eine sehr schlechte Praxis. ""
ist ein magischer Wert. Sie sollten niemals gegen magische Werte prüfen (besser bekannt als magische Zahlen ).
Was Sie tun sollten, ist mit einem beschreibenden Variablennamen zu vergleichen.
Beschreibende Variablennamen
Man könnte denken, dass "empty_string" ein beschreibender Variablenname ist. Ist es nicht .
Bevor Sie loslegen und empty_string = ""
denken, Sie hätten einen großartigen Variablennamen, mit dem Sie vergleichen können. Dies ist nicht das, was "beschreibender Variablenname" bedeutet.
Ein guter beschreibender Variablenname basiert auf seinem Kontext. Sie müssen darüber nachdenken, was die leere Zeichenfolge ist .
- Woher kommt das.
- Warum ist es dort?
- Warum müssen Sie danach suchen?
Einfaches Beispiel für ein Formularfeld
Sie erstellen ein Formular, in das ein Benutzer Werte eingeben kann. Sie möchten überprüfen, ob der Benutzer etwas geschrieben hat oder nicht.
Ein guter Variablenname kann sein not_filled_in
Dies macht den Code sehr lesbar
if formfields.name == not_filled_in:
raise ValueError("We need your name")
Beispiel für eine gründliche CSV-Analyse
Sie analysieren CSV-Dateien und möchten, dass die leere Zeichenfolge als analysiert wird None
(Da CSV vollständig textbasiert ist, kann es nicht darstellen None
ohne Verwendung vordefinierter Schlüsselwörter dargestellt werden.)
Ein guter Variablenname kann sein CSV_NONE
Dies erleichtert das Ändern und Anpassen des Codes, wenn Sie eine neue CSV-Datei haben, die None
mit einer anderen Zeichenfolge als dargestellt wird""
if csvfield == CSV_NONE:
csvfield = None
Es gibt keine Fragen darüber, ob dieser Code korrekt ist. Es ist ziemlich klar, dass es tut, was es tun sollte.
Vergleichen Sie dies mit
if csvfield == EMPTY_STRING:
csvfield = None
Die erste Frage lautet hier: Warum verdient die leere Zeichenfolge eine besondere Behandlung?
Dies würde zukünftigen Codierern mitteilen, dass eine leere Zeichenfolge immer als betrachtet werden sollte None
.
Dies liegt daran, dass Geschäftslogik (welcher CSV-Wert sein sollte None
) mit Codeimplementierung gemischt wird (womit vergleichen wir eigentlich)
Es muss eine Trennung der Bedenken zwischen den beiden geben.
""
nicht so gut?