Анализатор обнаружил фрагмент кода, в котором оператор 'if' расположен на той же строке, что и закрывающая скобка предыдущего оператора 'if'. Возможно, что в этом месте пропущено ключевое слово 'else', из-за чего программа работает не так, как ожидал программист.
Рассмотрим пример подобного кода:
public void fillTrialMessage(User user, Response response)
{
if (user.getTrialTime() > 7) {
// Do not set message
} if (user.getTrialTime() > 0) { // <=
response.setTrialMessage("Trial ends soon");
} else {
response.setTrialMessage("Trial has ended");
}
}
Здесь разработчик подразумевал, что сообщение в ответе заполнится только в случае, когда триальный период у пользователя подходит к концу или уже закончился. Однако, из-за пропущенного слова 'else', пользователь будет оповещён даже если до конца этого периода ещё несколько месяцев. После исправления фрагмент кода будет выглядеть следующим образом:
public void fillTrialMessage(User user, Response response)
{
if (user.getTrialTime() > 7) {
// Do not set message
} else if (user.getTrialTime() > 0) {
response.setTrialMessage("Trial ends soon");
} else {
response.setTrialMessage("Trial has ended");
}
}
Если же использование конструкции else-if не подразумевалось, следует исправить форматирование и перенести второй 'if' на следующую строку:
public void doSomething()
{
if (condition1) {
foo();
}
if (condition2) {
bar();
} else {
baz();
}
}
Такой код будет более привычен для большинства программистов и не вызовет подозрений. Кроме того, анализатор перестанет выдавать лишнее предупреждение.
Данная диагностика классифицируется как:
Взгляните на примеры ошибок, обнаруженных с помощью диагностики V6086. |