یک ماشین حساب قابل توسعه بسازید
اهمیت: 5
یک تابع سازنده 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
- پرانتز یا عبارات پیچیده در این تکلیف وجود ندارند.
- اعداد و عملگر دقیقا به یک فاصله خالی محدود میشوند.
- اگر دوست داشته باشید میتوانید مدیریت ارور را هم اضافه کنید.
- لطفا در نظر داشته باشید که متدها چگونه ذخیره شدهاند. آنها به سادگی به ویژگی
this.methodsاضافه شدهاند. - تمام آزمایشها و تبدیلات عددی در متد
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;
};
}