Create una calcolatrice estensibile
Create un costruttore Calculator
che crei oggetti calcoltrice “estensibili”.
Il compito consiste in due parti.
-
La prima parte consiste nell’implementare il metodo
calculate(str)
che accetti una stringa come"1 + 2"
nel formato “NUMERO operatore NUMERO” (delimitata da spazi) e ne ritorni il risultato. Dovrebbe saper interpretare sia+
che-
.Esempio d’uso:
let calc = new Calculator; alert( calc.calculate("3 + 7") ); // 10
-
Successivamente aggiungete il metodo
addMethod(name, func)
che ha lo scopo di insegnare alla calcolatrice una nuova operazione. Questo prende il nome dell’operatorename
e i due argomenti della funzionefunc(a,b)
che lo implementa.Ad esempio, proviamo ad aggiungere la moltiplicazione
*
, divisione/
e la potenza**
: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
- Non è richiesta la gestione delle parentesi o di operazioni complesse.
- I numeri e l’operatore sono separati esattamente da un singolo spazio.
- Se ne hai voglia potresti provare ad aggiungere un minimo di gestione degli errori.
- Da notare come vengono memorizzati i metodi. Vengono semplicemente aggiunti all’interno dell’oggetto.
- Tutti i test e le conversioni numeriche vegono effettuati nel metodo
calculate
. In futuro potrebbe essere esteso per supportare espressioni molto più complesse.
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;
};
}