tilbage til lektionen

Opret en lommeregner, der kan udvides

vigtighed: 5

Opret en konstruktørfunktion Calculator, der skaber “udvidelige” lommeregner-objekter.

Opgaven består af to dele.

  1. Først skal du implementere metoden calculate(str), der tager en streng som "1 + 2" i formatet “NUMMER operator NUMMER” (adskilt af mellemrum) og returnerer resultatet. Den skal forstå plus + og minus -.

    Brugseksempel:

    let calc = new Calculator;
    
    alert( calc.calculate("3 + 7") ); // 10
  2. Så skal du tilføje metoden addMethod(name, func), der lærer lommeregneren en ny operation. Den tager operatorens name og den to-argument funktion func(a,b), der implementerer den.

    For eksempel, lad os tilføje multiplikation *, division / og potens **:

    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
  • Ingen parenteser eller komplekse udtryk i denne opgave.
  • Tallene og operatoren er adskilt med præcis ét mellemrum.
  • Der kan tilføjes fejlhåndtering, hvis du ønsker det.

Åbn en sandbox med tests.

  • Vær opmærksom på, hvordan metoderne gemmes. De tilføjes simpelthen til this.methods-egenskaben.
  • Alle tests og numeriske konverteringer udføres i calculate-metoden. I fremtiden kan den udvides til at understøtte mere komplekse udtryk.
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;
  };
}

Åbn løsningen med tests i en sandbox.