Наш код стал более надежным и разборчивым. Но мы прячем NULL под ковер
TL;DR: избегайте нулей и неопределенных значений. Если вы избегаете их, вам никогда не понадобятся дополнительные параметры.
Проблемы
- Нули
- ЕСЛИ ЗАГРЯЗНЕНИЕ
Решения
- Удалить нули
- Сделка с неопределенным
Контекст
Optional Chaining, Options, Coalescence и многие другие решения помогают нам справиться с печально известными нулями.
Нет необходимости использовать их, когда наш код станет зрелым, надежным и без нулей.
Образец кода
Неправильный
const user = { name: 'Hacker' };
if (user?.credentials?.notExpired) { user.login(); }
user.functionDefinedOrNot?.();
// Seems compact but it is hacky and has lots // of potential NULLs and Undefined
Верно
function login() {}
const user = { name: 'Hacker', credentials: { expired: false } };
if (!user.credentials.expired) { login(); }
// Also compact // User is a real user or a polymorphic NullUser // Credentials are always defined. // Can be an instance of InvalidCredentials // Assuming we eliminated nulls from our code
if (user.functionDefinedOrNot !== undefined) { functionDefinedOrNot(); }
// This is also wrong. // Explicit undefined checks are yet another code smell
Обнаружение
[Х] Автоматически
Это языковая функция.
Мы можем обнаружить его и удалить.
Теги
- Нулевой
Заключение
Многие разработчики чувствуют себя в безопасности, загрязняя код нулевыми операциями.
На самом деле, это безопаснее, чем вообще не обрабатывать NULL.
Нулевые значения, Правда и Ложь — это тоже запахи кода.
Нам нужно стремиться выше и делать более чистый код.
Полезно: удалите из кода все пустые значения.
Плохое: используйте необязательную цепочку
Уродство: вообще не обрабатывать пустые значения
связи
Больше информации
Необязательный справочник по цепочке
Кредиты
Фото автора engin akyurt на Unsplash
Тот, кто сражается с монстрами, должен позаботиться о том, чтобы не стать из-за этого монстром. И если ты долго смотришь в бездну, бездна тоже смотрит в тебя.
Ницше
Эта статья является частью серии CodeSmell.