I don't really see any purpose to forcibly using a class setup here. All that's doing is allowing you to provide the data before result
is called. That's not necessary here though, and there are other ways of achieving that. If you needed to create multiple Calculate
objects, and retain them, and call result
on them multiple times, there may be a purpose. I can't see any gain here though.
I would just collapse everything down to a function that accepts the three bits of data (op
, num1
and num2
) and just call the function directly when needed.
There's cleaner ways of handling the "dispatching" than a switch
. I'd just use a regular JavaScript object here:
// Associate the operator strings
// with functions
var strToOp = {"+": (x, y) => x + y,
"-": (x, y) => x - y,
"*": (x, y) => x * y,
"/": (x, y) => x / y};
var num1 = 2;
var num2 = 5;
var op = "*";
// Get a function from the map
var func = strToOp[op];
// func will be undefined if they supply a bad operator string
// This is roughly equivalent to your "default" case
if(func) {
// And give the numbers to it
var result = func(num1, num2);
// Prints 10
console.log(result);
} else {
// Handle bad operator
}