Для человеческого читателя, глядя на код кажется, что либо первый return
будет хит, или второй, но компилятор не может быть уверен. Для компилятора это выглядит следующим образом:
if (condition1) {
...
return false;
} else if (condition2) {
...
return true;
}
и он должен знать, что будет возврат метод, если ни condition1
, ни condition2
верно?
Принимая во внимание, если вы измените его на прямой else
,
if (condition1) {
...
return false;
} else {
...
return true;
}
, то он уверен, что один из двух return
заявления должны быть поражены.
Фактически в вашем методе существует вероятность того, что ни одно условие не будет выполнено: если один из чисел, которые вы сравниваете, равен NaN
(специальное значение с плавающей запятой, представляющее «не число»), то оба из ваших условий if
будет ложным, и метод не будет иметь возвращаемого значения.
Существует также теоретически возможность того, что некоторый код, запущенный в другом потоке, может изменить значение this.power
между первой проверкой if
и второй, что может привести к тому, что оба условия будут оцениваться как ложные. Поэтому компилятор не может точно знать, что одно из условий будет выполнено, даже если они были логически дополняющими друг друга.
Похоже, что не все пути покрыты.Обязательно всегда используйте 'return' в качестве последнего оператора в вашем методе, избегая наличия нескольких операторов' return' для каждой ветви. –
Как вы заключаете код «неправильно»? Вы получили сообщение об ошибке? Неожиданный результат? – usr2564301
Что вы имеете в виду, что не так? Вы получили сообщение об ошибке? Или это ведет себя иначе, чем вы ожидаете? – fejese