Чем глубже у тебя вложенность кода, тем тяжелее в нем ориентироваться. Вот типичный код:
// Было:
function findSponsorByCookieValue(db, affiliateCookieValue) {
if (affiliateCookieValue) {
const splitValue = affiliateCookieValue.split('.');
if (splitValue.length == 2) {
const userId = splitValue[0];
if (!isNumber(userId)) {
const user = db.User.findById(userId);
if (user) {
if (user.isEnabled() && user.deletedAt === null) {
const incomingToken = splitValue[1];
const validToken = tokenCreateByUserId(user.id);
if (incomingToken == validToken) {
return user;
}
}
}
}
}
}
return null;
}
Что здесь печального, кроме глубины и тяжести восприятия? Смотри: из такого кода не очевидны выходы. Сколько вариантов выхода с негативным ответом ты здесь видишь? Посчитай. А покажи пальцем, где в коде возвращается положительный результат?
Один из моих любимых приемов бороться с таким — это как можно скорее выходить из метода в случае негативной ситуации.
// Стало
function findSponsorByCookieValue(db, affiliateCookieValue) {
if (!affiliateCookieValue) {
return null;
}
const splitValue = affiliateCookieValue.split('.');
if (splitValue.length != 2) {
return null;
}
const userId = splitValue[0];
if (!isNumber(userId)) {
return null;
}
const user = db.User.findById(userId);
if (!user) {
return null;
}
if (!user.isEnabled()) {
return null;
}
if (user.disabledAt) {
return null;
}
const incomingToken = splitValue[1];
const validToken = tokenCreateByUserId(user.id);
if (validToken != incomingToken) {
return null;
}
return user;
}
Обрати внимание: