Trovo hardcoding (sic) "" ogni volta che il controllo di una stringa vuota non è buono.
Approccio al codice pulito
Fare questo: foo == ""
è una pessima pratica. ""
è un valore magico. Non dovresti mai verificare i valori magici (più comunemente noti come numeri magici )
Quello che dovresti fare è confrontare con un nome di variabile descrittivo.
Nomi delle variabili descrittive
Si potrebbe pensare che "empty_string" sia un nome di variabile descrittivo. Non lo è .
Prima di andare e fare empty_string = ""
e pensare di avere un grande nome di variabile da confrontare. Questo non significa "nome variabile descrittivo".
Un buon nome di variabile descrittivo si basa sul suo contesto. Bisogna pensare a ciò che la stringa vuota è .
- Da dove viene.
- Perché è lì?
- Perché è necessario verificarlo.
Esempio di campo modulo semplice
Stai creando un modulo in cui un utente può inserire valori. Vuoi verificare se l'utente ha scritto qualcosa o no.
Potrebbe essere un buon nome di variabile not_filled_in
Questo rende il codice molto leggibile
if formfields.name == not_filled_in:
raise ValueError("We need your name")
Esempio di analisi approfondita di CSV
Stai analizzando i file CSV e vuoi che la stringa vuota venga analizzata come None
(Poiché CSV è interamente basato su testo, non può rappresentare None
senza l'utilizzo di parole chiave predefinite)
Potrebbe essere un buon nome di variabile CSV_NONE
Ciò semplifica la modifica e l'adattamento del codice se si dispone di un nuovo file CSV che rappresenta None
con un'altra stringa di""
if csvfield == CSV_NONE:
csvfield = None
Non ci sono dubbi sul fatto che questo codice sia corretto. È abbastanza chiaro che fa quello che dovrebbe fare.
Confronta questo con
if csvfield == EMPTY_STRING:
csvfield = None
La prima domanda qui è: perché la stringa vuota merita un trattamento speciale?
Ciò direbbe ai programmatori futuri che una stringa vuota dovrebbe essere sempre considerata come None
.
Questo perché mescola la logica aziendale (quale valore CSV dovrebbe essere None
) con l'implementazione del codice (a cosa stiamo effettivamente confrontando)
Deve esserci una separazione di preoccupazione tra i due.
""
non è buono?