СоздаÑÑ ÑаÑÑиÑÑемÑй калÑкÑлÑÑоÑ
СоздайÑе ÑÑнкÑÐ¸Ñ ÐºÐ¾Ð½ÑÑÑÑкÑÐ¾Ñ Calculator, коÑоÑÐ°Ñ ÑоздаÑÑ Â«ÑаÑÑиÑÑемÑе» обÑекÑÑ ÐºÐ°Ð»ÑкÑлÑÑоÑа.
Ðадание ÑоÑÑÐ¾Ð¸Ñ Ð¸Ð· двÑÑ ÑаÑÑей.
-
Ðо-пеÑвÑÑ , ÑеализÑйÑе меÑод
calculate(str), коÑоÑÑй пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑÑÑÐ¾ÐºÑ Ñипа"1 + 2"в ÑоÑмаÑе «ЧÐСÐРопеÑаÑÐ¾Ñ Ð§ÐСÐл (Ñазделено пÑобелами) и возвÑаÑÐ°ÐµÑ ÑезÑлÑÑаÑ. ÐеÑод должен понимаÑÑ Ð¿Ð»ÑÑ+и минÑÑ-.ÐÑÐ¸Ð¼ÐµÑ Ð¸ÑполÑзованиÑ:
let calc = new Calculator; alert( calc.calculate("3 + 7") ); // 10 -
ÐаÑем добавÑÑе меÑод
addMethod(name, func), коÑоÑÑй добавлÑÐµÑ Ð² калÑкÑлÑÑÐ¾Ñ Ð½Ð¾Ð²Ñе опеÑаÑии. Ðн пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð¾Ð¿ÐµÑаÑоÑnameи ÑÑнкÑÐ¸Ñ Ñ Ð´Ð²ÑÐ¼Ñ Ð°ÑгÑменÑамиfunc(a,b), коÑоÑÐ°Ñ Ð¾Ð¿Ð¸ÑÑÐ²Ð°ÐµÑ ÐµÐ³Ð¾.ÐапÑимеÑ, давайÑе добавим Ñмножение
*, деление/и возведение в ÑÑепенÑ**:let powerCalc = new Calculator; powerCalc.addMethod("*", (a, b) => a * b); powerCalc.addMethod("/", (a, b) => a / b); powerCalc.addMethod("**", (a, b) => a ** b); let result = powerCalc.calculate("2 ** 3"); alert( result ); // 8
- ÐÐ»Ñ ÑÑой задаÑи не нÑÐ¶Ð½Ñ Ñкобки или ÑложнÑе вÑÑажениÑ.
- ЧиÑла и опеÑаÑÐ¾Ñ ÑÐ°Ð·Ð´ÐµÐ»ÐµÐ½Ñ Ñовно одним пÑобелом.
- Ðе лиÑним бÑÐ´ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ Ð¾Ð±ÑабоÑÐºÑ Ð¾Ñибок.
ÐÑкÑÑÑÑ Ð¿ÐµÑоÑниÑÑ Ñ ÑеÑÑами Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ñи.
- ÐбÑаÑиÑе внимание, как Ñ ÑанÑÑÑÑ Ð¼ÐµÑодÑ. Ðни пÑоÑÑо добавлÑÑÑÑÑ Ðº внÑÑÑÐµÐ½Ð½ÐµÐ¼Ñ Ð¾Ð±ÑекÑÑ.
- ÐÑе ÑеÑÑÑ Ð¸ ÑиÑловÑе пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²ÑполнÑÑÑÑÑ Ð² меÑоде
calculate. РбÑдÑÑем он Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑаÑÑиÑен Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑжки более ÑложнÑÑ Ð²ÑÑажений.
function Calculator() {
this.methods = {
"-": (a, b) => a - b,
"+": (a, b) => a + b
};
this.calculate = function(str) {
let split = str.split(' '),
a = +split[0],
op = split[1],
b = +split[2]
if (!this.methods[op] || isNaN(a) || isNaN(b)) {
return NaN;
}
return this.methods[op](a, b);
}
this.addMethod = function(name, func) {
this.methods[name] = func;
};
}
ÐÑкÑÑÑÑ ÑеÑение Ñ ÑеÑÑами в пеÑоÑниÑе.