darsga qaytish

Kengaytiriladigan kalkulyatorni yarating

“Kengaytiriladigan” kalkulyator obyektlarini yaratadigan Calculator konstruktor funktsiyasini yarating.

Vazifa ikki qismdan iborat.

  1. Birinchidan, “NUMBER operatori NUMBER” (bo’shliq bilan ajratilgan) formatida "1 + 2" kabi matni qabul qiladigan va natijani qaytaradigan calculate(str) usulini qo’llang. Plyus + va minus - ni tushunishi kerak.

    Foydalanish misoli:

    let calc = new Calculator();
    
    alert(calc.calculate("3 + 7")); // 10
  2. Keyin kalkulyatorga yangi operatsiyani o’rgatadigan addMethod(name, func) usulini qo’shing. Buning uchun name operatori va uni amalga oshiradigan ikkita argumentli funktsiya func(a, b) kerak bo’ladi.

    Masalan, ko’paytma *, bo’linma / va darajani ** qo’shamiz:

    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
  • Ushbu topshiriqda qavs yoki murakkab ifodalar yo’q.
  • Raqamlar va operator to’liq bitta bo’sh joy bilan chegaralangan.
  • Agar uni qo’shmoqchi bo’lsangiz, ishlov berishda xato bo’lishi mumkin.

Sinovlar bilan sandbox-ni oching.

  • Iltimos, usullarning qanday saqlanishiga e’tibor bering. Ular oddiygina ichki ob’ektga qo’shiladi.
  • Barcha testlar va raqamli konvertatsiyalar hisoblash usulida amalga oshiriladi. Kelajakda u yanada murakkab iboralarni qo’llab-quvvatlash uchun kengaytirilishi mumkin.
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;
  };
}

Yechimni sandbox-dagi sinovlar bilan oching.