Я нахожу жесткое кодирование (sic) "" каждый раз для проверки пустой строки не таким хорошим.
Чистый код подход
Делать это: foo == ""
очень плохая практика. ""
это магическая ценность. Вы никогда не должны проверять магические значения (более известные как магические числа )
Что вы должны сделать, это сравнить с описательным именем переменной.
Описательные имена переменных
Кто-то может подумать, что «empty_string» - это описательное имя переменной. Это не так .
Прежде чем идти и делать empty_string = ""
и думать, у вас есть отличное имя переменной для сравнения. Это не то, что означает «описательное имя переменной».
Хорошее описательное имя переменной основано на ее контексте. Вы должны думать о том, что пустая строка является .
- Откуда это взялось.
- Почему это там?
- Почему вы должны проверить это.
Пример простого поля формы
Вы создаете форму, где пользователь может вводить значения. Вы хотите проверить, написал ли пользователь что-то или нет.
Хорошее имя переменной может быть not_filled_in
Это делает код очень читабельным
if formfields.name == not_filled_in:
raise ValueError("We need your name")
Пример тщательного разбора CSV
Вы анализируете файлы CSV и хотите, чтобы пустая строка была проанализирована как None
(Поскольку CSV полностью основан на тексте, он не может быть представлен None
без использования предопределенных ключевых слов)
Хорошее имя переменной может быть CSV_NONE
Это облегчает изменение и адаптацию кода, если у вас есть новый файл CSV, представляющий None
другую строку, чем""
if csvfield == CSV_NONE:
csvfield = None
Там нет вопросов о том, если этот кусок кода является правильным. Довольно ясно, что он делает то, что должен делать.
Сравните это с
if csvfield == EMPTY_STRING:
csvfield = None
Первый вопрос здесь: почему пустая строка заслуживает особого отношения?
Это скажет будущим кодировщикам, что пустая строка всегда должна рассматриваться как None
.
Это потому, что он смешивает бизнес-логику (какое должно быть значение CSV None
) с реализацией кода (с чем мы на самом деле сравниваем)
Должно быть разделение проблем между ними.
""
не так хорошо?