Первопричина против симптома
Самая соблазнительная ловушка в отладке — заплатка, которая заставляет ошибку исчезнуть, не устраняя причину. Если user равен undefined, а вы «чините» это с помощью if (user) { ... }, ошибка прекращается — но теперь регистрации молча ничего не делают, что хуже: громкое падение хотя бы говорило вам, что что-то не так, а теперь не говорит ничего. Настоящий вопрос: почему user здесь undefined? Может быть, поиск в базе данных не удался. Может быть, поле было переименовано. Может быть, выше по коду пропущен await.
Когда AI предлагает исправление, спросите его:
- «Это исправляет причину или прячет симптом?»
- «Какова была первоначальная причина того, что значение было неправильным?»
- «Может ли эта же первопричина сломать что-то ещё?»
Исправление первопричины обычно делает код проще или понятнее. Заплатка-симптом обычно добавляет защитную проверку, try/catch, который проглатывает ошибки, или значение по умолчанию, которое маскирует настоящую проблему. Относитесь ко второму типу с подозрением. Есть признак, который стоит выучить: если исправление добавляет код, единственная задача которого — предотвратить падение, а не сделать правильную вещь, вы, вероятно, латаете симптом. Настоящие исправления обычно полностью устраняют невозможное состояние, а не просто переживают его.