Задать вопрос
@SlideUp

Говнокод или нет?

Ребятки всем привет. Решаю разные задачки с помощью JS и вот решил одну(квадратное уравнение). Подкажите нормальный ли код или лучше как-то по ф-циям разбить?

let a = prompt("Enter a value", 10);
let b = prompt("Enter b value", 10);
let c = prompt("Enter c value", 10);
let result;
let discr = (b * b ) - 4 * a * c;
let sqrtDiscr = Math.sqrt(discr);
if(a === 0 && b === 0 && c === 0){
  throw new Error("The values must be bigger than 0");
} else if(discr < 0 ){
  throw new Error("This Equation have not solution");
} else if(discr === 0 ){
  console.log("This Equation have only 1 solution")
  result = (-b) / (2 * a);
} else if (discr > 0){
  console.log("This Equation have 2 solution");
  result = (- b + sqrtDiscr) / (2 * a) + ";     " + (- b - sqrtDiscr) / (2 * a);
}

console.log(result);
  • Вопрос задан
  • 448 просмотров
Подписаться 2 Оценить 6 комментариев
Решение пользователя Сергей Соколов К ответам на вопрос (3)
sergiks
@sergiks Куратор тега JavaScript
♬♬
Код г-но неидеален, и вот, почему:
см. комменты в коде
let a = prompt("Enter a value", 10); // a, b, c дальше не меняются
let b = prompt("Enter b value", 10); // поэтому можно
let c = prompt("Enter c value", 10);  // const
let result;
let discr = (b * b ) - 4 * a * c;
let sqrtDiscr = Math.sqrt(discr); // при отрицат. discr здесь NaN
if(a === 0 && b === 0 && c === 0) { // проверяем уже после вычислений
  throw new Error("The values must be bigger than 0");
} else if(discr < 0 ){ // проверяем уже после вычисления sqrtDiscr
  throw new Error("This Equation have not solution");
} else if(discr === 0 ){
  console.log("This Equation have only 1 solution")
  result = (-b) / (2 * a);
} else if (discr > 0){
  console.log("This Equation have 2 solution");
  result = (- b + sqrtDiscr) / (2 * a) + ";     " + (- b - sqrtDiscr) / (2 * a);
}

console.log(result);


По функциям разбивать есть смысл если из нескольких мест идёт обращение, код повторяется более двух раз. Тут можно в двух последних случаях считать два корня одной формулой, и при нулевом дискриминанте брать только одно из двух равных значений. Но это излишняя, дурная, вредная переоптимизация.

Ещё вы не проверили случай, когда a === 0: у вас будет деление на ноль.
Ответ написан