Visitar URL original
Kengaytiriladigan kalkulyatorni yarating
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.