Привычка ИИ: избыточная защита
ИИ обучен на терабайтах кода, и среди этого кода много паранойи. Поэтому он по умолчанию пишет защитно: оборачивает в try/catch, проверяет на null, валидирует типы. Часть этого нужна. Часть — мусор, замаскированный под профессионализм.
Признак мусора №1: catch без действия
Если в catch только console.error и throw e — это эквивалент отсутствию try/catch. ИИ часто пишет такие блоки «на всякий случай», но они только усложняют чтение.
Признак мусора №2: проверка на null после try
Если функция уже бросает ошибку при отсутствии данных, проверка if (!user) return null — лишняя страховка от того, что не произойдёт.
Признак мусора №3: try/catch на простом методе
String.trim() не бросает ошибку. Math.round() не бросает ошибку. Если ИИ обернул такой вызов в try/catch — это паранойя без основания.
Как решать
Спроси: «какая конкретно ошибка может тут случиться?». Если можешь назвать её — защита нужна. Если ответ «ну, мало ли» — удаляй. «Мало ли» в коде равно «никогда».
// "Защитный" AI-код. Половина строк — про ошибки, которые невозможны.
async function getUserName(userId) {
if (!userId) {
throw new Error('userId is required');
}
if (typeof userId !== 'string') {
throw new Error('userId must be a string');
}
let user;
try {
user = await db.users.findOne({ id: userId });
} catch (e) {
console.error('Database error:', e);
throw e;
}
if (!user) {
return 'Unknown';
}
if (!user.name) {
return 'Unknown';
}
try {
return user.name.trim();
} catch (e) {
console.error('Trim error:', e);
return 'Unknown';
}
}Найди здесь хотя бы 3 проверки, которые можно удалить без потери смысла.