Je trouve que le "hardcoding (sic)" "à chaque fois pour vérifier une chaîne vide n'est pas aussi bon.
Approche de code propre
Faire ceci: foo == ""
est une très mauvaise pratique. ""
est une valeur magique. Vous ne devriez jamais vérifier les valeurs magiques (plus communément appelées nombres magiques )
Ce que vous devez faire, c'est comparer à un nom de variable descriptive.
Noms de variables descriptives
On peut penser que "empty_string" est un nom de variable descriptive. Ça ne l'est pas .
Avant de partir et empty_string = ""
pensez que vous avez un excellent nom de variable à comparer. Ce n'est pas ce que signifie "nom de variable descriptive".
Un bon nom de variable descriptive est basé sur son contexte. Vous devez penser à ce que la chaîne vide est .
- D'où est ce que ça vient.
- Pourquoi est-il là?
- Pourquoi avez-vous besoin de le vérifier?
Exemple de champ de formulaire simple
Vous créez un formulaire où un utilisateur peut entrer des valeurs. Vous voulez vérifier si l'utilisateur a écrit quelque chose ou non.
Un bon nom de variable peut être not_filled_in
Cela rend le code très lisible
if formfields.name == not_filled_in:
raise ValueError("We need your name")
Exemple d'analyse CSV approfondie
Vous analysez des fichiers CSV et souhaitez que la chaîne vide soit analysée comme None
(Étant donné que CSV est entièrement basé sur du texte, il ne peut pas représenter None
sans utiliser de mots clés prédéfinis)
Un bon nom de variable peut être CSV_NONE
Cela rend le code facile à modifier et à adapter si vous avez un nouveau fichier CSV qui représente None
avec une autre chaîne que""
if csvfield == CSV_NONE:
csvfield = None
Il n'y a aucune question quant à savoir si ce morceau de code est correct. Il est assez clair qu'il fait ce qu'il devrait faire.
Comparez cela à
if csvfield == EMPTY_STRING:
csvfield = None
La première question ici est: pourquoi la chaîne vide mérite-t-elle un traitement spécial?
Cela indiquerait aux futurs codeurs qu'une chaîne vide devrait toujours être considérée comme None
.
En effet, il mélange la logique métier (quelle valeur CSV doit être None
) avec l'implémentation du code (à quoi est-ce que nous comparons réellement)
Il doit y avoir une séparation des préoccupations entre les deux.
""
pas aussi bon?