Анализатор обнаружил фрагмент кода, в котором оператор '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. |