Наш код стал более надежным и разборчивым. Но мы прячем NULL под ковер

TL;DR: избегайте нулей и неопределенных значений. Если вы избегаете их, вам никогда не понадобятся дополнительные параметры.

Проблемы

Решения

  1. Удалить нули
  2. Сделка с неопределенным

Контекст

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.