Не могу найти ошибку в коде при рефакторинге
Нужно избавится от логических операторов && и ||, заменив их на более читаемые конструкции if / else. Исходный код:
function getBoolean(a, b, c, d) {
return a && a > b && c > d && a < c || b && b > a && c > a || c > d && d && d < a;
}
Вот что у меня получилось:
function getBoolean(a, b, c, d) {
if(a < b){
if(c > d){
if(a < c){
return true
}
}
}
if(b > a){
if(c > a){
return true
}
}
if (c > d){
if(d < a){
return true
}
}
else{
return false
}
}
Все работает правильно, только input: a = 0, b = 0, c = 54, d = 3 должен возвращать false, а у меня возвращается undefined. Где ошибка?
Ответы (3 шт):
Автор решения: Эникейщик
→ Ссылка
При этих данных выполнение заходит в эту ветку:
if (c > d){
if(d < a){
return true
}
}
Но поскольку d < a дает нам false, то на этом выполнение функции и прикращается. И return для такого случая отсутствует.
Автор решения: user382492
→ Ссылка
Да я подумал и оптимизировал. Вот так получилось
function getBoolean(a, b, c, d) {
if (a < b){
return true;
} if (a < d){
return false;
} if (c > d) {
return true;
} if (a === c) {
return false;
}
}
Автор решения: Дмытрык
→ Ссылка
if (!a || !b || !d) return false;
if (a > b && c > d && a < c) return true;
if (b > a && c > a ) return true;
if (c > d && d < a) return true;
return false