Za każdym razem uważam, że kodowanie „sic” nie jest tak dobre.
Podejście do czystego kodu
Robienie tego: foo == ""
jest bardzo złą praktyką. ""
jest magiczną wartością. Nigdy nie powinieneś sprawdzać wartości magicznych (bardziej znanych jako liczby magiczne) )
Co powinieneś zrobić, to porównać do opisowej nazwy zmiennej.
Opisowe nazwy zmiennych
Ktoś może pomyśleć, że „empty_string” to opisowa nazwa zmiennej. To nie jest .
Zanim pójdziesz i zrobisz empty_string = ""
pomyślisz, że masz świetną nazwę zmiennej do porównania. Nie to znaczy „nazwa zmiennej opisowej”.
Dobra nazwa zmiennej opisowej oparta jest na jej kontekście. Trzeba myśleć o tym, co pusty łańcuch jest .
- Skąd to pochodzi.
- Dlaczego tam jest
- Dlaczego musisz to sprawdzić?
Prosty przykład pola formularza
Budujesz formularz, w którym użytkownik może wprowadzać wartości. Chcesz sprawdzić, czy użytkownik coś napisał, czy nie.
Dobra nazwa zmiennej może być not_filled_in
Dzięki temu kod jest bardzo czytelny
if formfields.name == not_filled_in:
raise ValueError("We need your name")
Dokładny przykład analizy CSV
Analizujesz pliki CSV i chcesz, aby pusty ciąg był analizowany jako None
(Ponieważ CSV jest w całości oparty na tekście, nie może reprezentować None
bez użycia wstępnie zdefiniowanych słów kluczowych)
Dobra nazwa zmiennej może być CSV_NONE
Ułatwia to zmianę i dostosowanie kodu, jeśli masz nowy plik CSV, który reprezentuje None
inny ciąg niż""
if csvfield == CSV_NONE:
csvfield = None
Nie ma pytań, czy ten fragment kodu jest poprawny. Jest całkiem jasne, że robi to, co powinien.
Porównaj to z
if csvfield == EMPTY_STRING:
csvfield = None
Pierwsze pytanie brzmi: dlaczego pusty ciąg zasługuje na specjalne traktowanie?
Oznaczałoby to przyszłym programistom, że pusty ciąg powinien być zawsze uważany za None
.
Jest tak, ponieważ łączy logikę biznesową (jaka powinna być wartość CSV None
) z implementacją kodu (z czym tak naprawdę porównujemy)
Trzeba między nimi rozdzielić obawy .
""
nie jest tak dobrze?