var calculate = function (firstNumber, secondNumber, operator) {
if (operator === '+') {
return parseInt(firstNumber, 10) + parseInt(secondNumber, 10);
} else if (operator === '-') {
return parseInt(firstNumber, 10) - parseInt(secondNumber, 10);
} else if (operator === '*') {
return parseInt(firstNumber, 10) * parseInt(secondNumber, 10);
} else if (operator === '/') {
return parseInt(firstNumber, 10) / parseInt(secondNumber, 10);
}
}
Вариант решения, предполагающий, что вы, как и я, обучаетесь с нуля в рамках интерактивных курсов html academy и двигаетесь последовательно, начиная с блоков начального уровня:
var calculate = function (firstNumber, secondNumber, operator) {
var result = 0;
firstNumber = parseInt(firstNumber, 10);
secondNumber = parseInt(secondNumber, 10);
if (operator === ‘+’) {
result = firstNumber + secondNumber;
} else if (operator === ‘-’) {
result = firstNumber - secondNumber;
} else if (operator === ‘*’) {
result = firstNumber * secondNumber;
} else if (operator === ‘/’) {
result = firstNumber / secondNumber;
}
return result;
}
нет break
var calculate = function (firstNumber, secondNumber, operator) {
switch (operator) {
case ‘+’:
return +firstNumber + +secondNumber;
break;
case ‘-’:
return +firstNumber - +secondNumber;
break;
case ‘*’:
return +firstNumber * +secondNumber;
break;
case ‘/’:
return +firstNumber / +secondNumber;
default:
return "Sorry, we are out of " + operator + “.”;
}
}
Вопрос Лере. Я вижу тут, как и во всех других испытаниях, полно умников, которые предлагают “лаконичные” решения, используя знания, полученные в других источниках. В связи с этим вопрос: правильно ли при решении пользоваться ТОЛЬКО полученными здесь знаниями или гуглить допустимо (а может даже правильно и рекомендовано вами), потому как неоднократно слышал, что для программиста главный навык - искать инфу в сети, т.к. большинство задач уже решены другими.
Мое решение.
let calculate = function (firstNumber, secondNumber, operator) {
let result = eval(firstNumber + operator + secondNumber);
return result;
}
Моё решение. Коротко и ясно:
let calculate = function (firstNumber, secondNumber, operator) {
return eval(firstNumber + operator + secondNumber);
}
И второй вариант:
let calculate = function (firstNumber, secondNumber, operator) {
switch(operator) {
case "+": {
return Number(firstNumber) + Number(secondNumber);
break;
}
case "-": {
return Number(firstNumber) - Number(secondNumber);
break;
}
case "*": {
return Number(firstNumber) * Number(secondNumber);
break;
}
case "/": {
return Number(firstNumber) / Number(secondNumber);
break;
}
default: {
break;
}
}
}
Лучше использовать коллекции:
Сводка
const calculate = function(firstNumber, secondNumber, operator) {
const first = Number(firstNumber);
const second = Number(secondNumber);
const operations = {
'+': first + second,
'-': first - second,
'*': first * second,
'/': second > 0
? first / second
: 'Ошибка при делении на 0, проверьте делитель'
}
return operations[operator];
}
function calculate (firstNumber, secondNumber, operator) {
switch (operator) {
case “+”: return Number(firstNumber) + Number(secondNumber);
break;
case “-”: return firstNumber - secondNumber;
break;
case “*”: return firstNumber * secondNumber;
break;
case “/”: return firstNumber / secondNumber;
break;
}
}
let calculate = function(firstNumber, secondNumber, operator) {
a = +firstNumber;
b = +secondNumber;
if (operator == '+') { return a + b; }
if (operator == '-') { return a - b; }
if (operator == '*') { return a * b; }
if (operator == '/') { return a / b; }
};
(Eval: выполнение строки кода)
let calculate = (firstNumber, secondNumber, operator) =>
window.eval(firstNumber + operator + secondNumber)
let calculate = (firstNumber, secondNumber, operator) => {
switch(operator) {
case '+':
return +firstNumber + +secondNumber
case '-':
return +firstNumber - +secondNumber
case '*':
return +firstNumber * +secondNumber
case '/':
return +firstNumber / +secondNumber
}
}
Используя switch, у меня появился вопрос. Подскажите, если используем switch внутри
функции, достаточно написать return для выхода из функции, или в switch и здесь необходим
break для корректной работы? Задание выполнено без ошибок, но вопрос у меня остался.
Сам покопался, разобрался. Итого:
(eval) Нельзя использовать eval с пользовательским вводом без предварительной валидации. Могут вместо числа или оператора передать код для доступа к cookie/сессии и прочие гадости.
Если добавлять валидацию, код будет ещё больше чем в switch.
(break) return завершает выполнение функции, поэтому нет смысла break использовать внутри данного варианта реализации switch
function calculate(firstNumber, secondNumber, operator){
firstNumber = +firstNumber;
secondNumber = +secondNumber;
switch (operator) {
case ‘+’ : return firstNumber += secondNumber;
case ‘-’ : return firstNumber -= secondNumber;
case ‘*’ : return firstNumber *= secondNumber;
case ‘/’ : return firstNumber /= secondNumber;
}
};