zpět k lekci

Vytvořte rozšiřitelný kalkulátor

důležitost: 5

Vytvořte konstruktor Kalkulátor, který bude vytvářet „rozšiřitelné“ objekty kalkulátoru.

Úloha se skládá ze dvou částí.

  1. Nejprve implementujte metodu vypočítej(řetězec), která obdrží řetězec, např. "1 + 2", ve formátu „ČÍSLO operátor ČÍSLO“ (oddělené mezerou) a vrátí výsledek. Měla by rozumět plusu + a minusu -.

    Příklad použití:

    let kalkulátor = new Kalkulátor;
    
    alert( kalkulátor.vypočítej("3 + 7") ); // 10
  2. Pak přidejte metodu přidejMetodu(název, funkce), která naučí kalkulátor nové operaci. Obdrží operátor název a funkci o dvou argumentech funkce(a, b), která jej implementuje.

    Například přidáme násobení*, dělení / a umocňování **:

    let silnýKalkulátor = new Kalkulátor;
    silnýKalkulátor.přidejMetodu("*", (a, b) => a * b);
    silnýKalkulátor.přidejMetodu("/", (a, b) => a / b);
    silnýKalkulátor.přidejMetodu("**", (a, b) => a ** b);
    
    let výsledek = silnýKalkulátor.vypočítej("2 ** 3");
    alert( výsledek ); // 8
  • V této úloze nejsou závorky ani složité výrazy.
  • Čísla a operátor jsou oddělena právě jednou mezerou.
  • Pokud chcete přidat ošetřování chyb, můžete.

Otevřít pískoviště s testy.

  • Prosíme všimněte si, jak jsou metody uloženy. Jednoduše se přidávají do vlastnosti this.metody.
  • Všechny testy a číselné konverze se provádějí v metodě vypočítej. V budoucnu může být rozšířena, aby podporovala složitější výrazy.
function Kalkulátor() {

  this.metody = {
    "-": (a, b) => a - b,
    "+": (a, b) => a + b
  };

  this.vypočítej = function(řetězec) {

    let split = řetězec.split(' '),
      a = +split[0],
      op = split[1],
      b = +split[2];

    if (!this.metody[op] || isNaN(a) || isNaN(b)) {
      return NaN;
    }

    return this.metody[op](a, b);
  };

  this.přidejMetodu = function(jméno, funkce) {
    this.metody[jméno] = funkce;
  };
}

Otevřít řešení s testy na pískovišti.