Задать вопрос
@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 комментариев
Решения вопроса 2
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: у вас будет деление на ноль.
Ответ написан
Сейчас модно складывать код в одну строку, можешь попробовать)
А так код нормальный, читаемый и в рамках одной задачки пойдет и ненужно его разбивать.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
KorniloFF
@KorniloFF Куратор тега JavaScript
Работаю по font-end / JS
Я бы сделал как-то так:
<button onclick="go();">Пуск</button>
<script>
	function go () {
		let t= " in ax2 + bx + c",
			a = prompt("Enter a value"+t, 10),
			b = prompt("Enter b value"+t, 10),
			c = prompt("Enter c value"+t, 10),
			result;
		
		if(a === 0 && b === 0 && c === 0){
			return alert ("The values must be bigger than 0");
		}

		var discr = (b * b ) - 4 * a * c,
			sqrtDiscr = Math.sqrt(discr);
		
		if(discr < 0 ){
			return alert ("This Equation have not solution");
		}

		

		if(discr === 0 ){
		console.log("This Equation have only 1 solution")
		result = (-b) / (2 * a);
		} else {
		console.log("This Equation have 2 solution");
		result = ((- b + sqrtDiscr) / (2 * a)).toFixed(2) + "; \n" + ((- b - sqrtDiscr) / (2 * a)).toFixed(2);
		alert (result);
		}
	}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы