Могу ли я поместить четыре функции в одну?
Я не уверен, правильно ли я это формулирую, но в основном я написал 4 функции (я должен построить калькулятор), и каждая функция предназначена для деления, сложения, умножения и вычитания. Можно ли как-нибудь добавить все эти "команды" в одну функцию вместо четырех отдельных?
Спасибо.
function add (num1, num2){
var intOutput= parseInt(num1)+parseInt(num2);
document.getElementById("output").innerHTML=intOutput;
}
function subtract (num1, num2){
var intOutput= parseInt(num1)-parseInt(num2);
document.getElementById("output").innerHTML=intOutput;
}
function multiply (num1, num2){
var intOutput= parseInt(num1)*parseInt(num2);
document.getElementById("output").innerHTML=intOutput;
}
function divide (num1, num2){
var intOutput= parseInt(num1)/parseInt(num2);
document.getElementById("output").innerHTML=intOutput;
}
7 ответов
Похоже, вам нужна общая функция, которая будет условно выполнять запрошенное действие. Примерно так должно работать:
function calculate(num1, num2, action)
{
if (action == 'add') {
//...
} else if (action == 'subtract') {
//...
} else if (action == 'multiply') {
//...
} else if (action == 'divide') {
//...
}
}
РЕДАКТИРОВАТЬ: ради удобочитаемости и долгосрочной ремонтопригодности, вы все равно можете сохранить фактические действия в отдельных функциях и просто вызывать их из различных функций. if
ветви.
Вы можете рефакторинг всего кода DOM как таковой:
function proc(op, num1, num2) {
document.getElementById("output").innerHTML = op(parseInt(num1), parseInt(num2));
}
Затем с помощью этих простых помощников:
var addOp = function (a, b) { return a + b; };
var subOp = function (a, b) { return a - b; };
var multOp = function (a, b) { return a * b; };
var divOp = function (a, b) { return a / b; };
Вы можете делать любые операции по вашему желанию:
proc(addOp, num1, num2);
proc(subOp , num1, num2);
proc(multOp , num1, num2);
proc(divOp , num1, num2);
function calculate(type, num1, num2) {
var _in = parseInt(num1, 10),
_out = parseInt(num2, 20),
output = 0;
switch(type) {
case 'add':
output = _in + _out;
break;
case 'subtract':
output = _in - _out;
break;
case 'multiply':
output = _in * _out;
break;
case 'divide':
output = _in / _out;
break;
}
document.getElementById("output").innerHTML = output;
}
использоваться как
calculate('add', 10, 20); // 30
calculate('multiply', 10, 20); // 200
// etc...
Если вы убедитесь, что строка является просто числом оператором и числом, вы можете использовать eval для развлечения (все, хотя eval - зло)
function calculate(str) {
if (/\d+(\*|\-|\+|\/)\d+/.test(str))
document.getElementById("output").innerHTML = eval(str);
}
Тогда вы могли бы просто сделать
calculate('20*10')
calculate('20+100')
calculate('1000/100')
Вы можете абстрагироваться от обычного поведения, используя переменные функции:
function calculateAndDisplay(num1, num2, operation) {
var intOutput= operation(num1, num2);
document.getElementById("output").innerHTML=intOutput;
}
function add(num1, num2) {
calculateAndDisplay(num1, num2, function(a, b) { return a + b; });
}
...
Вы должны быть в состоянии сделать это, если добавите другой параметр для выполняемой операции. Может быть, переключатель для выполнения каждой операции.
function operate(n1,n2,op){
var output;
switch(op){
case 'add':
output = n1+n2;
break;
case 'sub':
output= n1-n2;
break;
case 'div':
output = n1/n2;
break;
case 'mul':
output = n1*n2;
}
document.getElementById('output').innerHtml = output
}
Поскольку это звучит как домашнее задание, я дам вам домашнее задание.
Вы знаете, что можете вызывать функцию из любого места, включая другую функцию, поэтому вполне возможно создать "одну функцию, чтобы управлять ими всеми".
Например:
function helloJohn() {
console.log('Hello John');
}
function helloJane() {
console.log('Hello Jane');
}
function hello(name) {
if (name === 'John') {
helloJohn();
} else if (name === 'Jane') {
helloJane();
}
}
Я мог бы легко изменить свой hello
функция для включения helloJohn
а также helloJane
функциональность.
var Calculator = {
add: function (num1, num2) {
var intOutput= parseInt(num1)+parseInt(num2);
document.getElementById("output").innerHTML=intOutput;
},
subtract: function (num1, num2) {
var intOutput= parseInt(num1)-parseInt(num2);
document.getElementById("output").innerHTML=intOutput;
},
multiply: function (num1, num2) {
var intOutput= parseInt(num1)*parseInt(num2);
document.getElementById("output").innerHTML=intOutput;
},
divide: function (num1, num2) {
var intOutput= parseInt(num1)/parseInt(num2);
document.getElementById("output").innerHTML=intOutput;
}
};
Calculator.add(4, 5);
Calculator.divide(20, 10);