Вызов "Калькулятор" не работает

Не работает проверка.

Здравствуйте, мы разберёмся. Спасибо за обратную связь)

В курсах начали рассказывать синтаксис es6 или как?)

3 лайка

Пока нет, в ближайших курсах начнём

я не понимаю что написано в коде выше, поэтому покажу свое решение, пока знаний только на это хватает((

var calculate = function (firstNumber, secondNumber, operator) {
var total = 0;
if (operator === ‘+’) {
total = parseInt(firstNumber, 10) + parseInt(secondNumber, 10);
} else if (operator === ‘-’) {
total = parseInt(firstNumber, 10) - parseInt(secondNumber, 10);
} else if (operator === ‘*’) {
total = parseInt(firstNumber, 10) * parseInt(secondNumber, 10);
} else if (operator === ‘/’) {
total = parseInt(firstNumber, 10) / parseInt(secondNumber, 10);
}
return total;
};

1 лайк

Выше пример полиморфизма, сама по себе штука очень крутая, позволяет писать код без условных конструкций. Непонятно скорей всего из-за того, что код написан на современном стандарте es6, советую его освоить самостоятельно.
Кстати, в том примере словарь с операторами надо было записать в константу и вынести за пределы функции, он же не изменяется. Ну и функцию лучше так никогда не определять, лучше по старинке или стрелочную, как в словаре

1 лайк

Подскажите, почему не срабатывает проверка на плюсе и на умножении.

var calculate = function(firstNumber, secondNumber, operator) {
  firstNumber = +firstNumber;
  secondNumber = +secondNumber;
  switch (operator) {
    case '+' : firstNumber += secondNumber;
    case '-' : firstNumber -= secondNumber;
    case '*' : firstNumber *= secondNumber;
    case '/' : firstNumber /= secondNumber;
    default : return firstNumber;
  }
  return firstNumber;
};
1 лайк

что это?

потому что не правильно используете switch, почитайте про него подробнее, если не получится исправить - перепешите на if

Так можно привести строку к числу

никогда не стоит изменять параметры функции

Понятно, попробую по-другому. Спасибо!

Получилось. Забыл добавить break;

var calculate = function(firstNumber, secondNumber, operator) {
  var num1 = +firstNumber;
  var num2 = +secondNumber;
  switch (operator) {
    case '+' : num1 += num2; break;
    case '-' : num1 -= num2; break;
    case '*' : num1 *= num2; break;
    case '/' : num1 /= num2; break;
    default : return num1;
  }
  return num1;
};

Можно и без него, сразу возвращать необходимые данные, соответственно и результат не придётся записывать в num1
А если хотите так оставить, то лучше результат не записывать в num1, а сделать отдельную переменную result. Цель писать не как можно короче, а хорошо читаемый код

1 лайк

Ясно, спасибо.

Если честно меня немного удивило, что тут не проходятся переключатели, но вот как по-сути надо было решить(чтоб совсем просто[и без мудрений]):

var calculate = function(firstNumber, secondNumber, operator) {
 var fN = parseInt(firstNumber);
 var sN = parseInt(secondNumber);
 var res = 0;
 switch(operator) {
   case '+': res = fN + sN; break;
   case '-': res = fN - sN; break;
   case '*': res = fN * sN; break;
   case '/': res = fN / sN; break;
   default: res = fN + sN;
   }
   return res;
  }

странная обработка по умолчанию у вас. То есть, если по вашей логике передать в качестве оператора, допустим, такой символ & или %, то он вернет сумму? и почему сразу не возвращаете результат вычисления?

function calculate(firstNumber, secondNumber, operator) {
  function calculateString(fn) { 
    return new Function('return ' + fn)();
  }      
  let resultInString = firstNumber + operator + secondNumber;
  resultOfCalculations = calculateString(resultInString);
  return resultOfCalculations;
}

либо с eval:
    function calculate(firstNumber, secondNumber, operator) {  
      let resultInString = firstNumber + operator + secondNumber; 
      resultOfCalculations = eval(resultInString);
      return resultOfCalculations;
    }
1 лайк

Пошли по пути наименьшего сопротивление, но в реальности никто не использует ни eval ни new Function как eval в связи с безопасностью. В ваш калькулятор можно передать любой код и он выполнится - это серьезная проблема

1 лайк

можно добавить проверку в конце:

if (typeof  resultOfCalculations !== 'function') {
  return resultOfCalculations;
}