Codice semplificatore di una calcolatrice (aiuto) [duplicato]

0

Questo fa parte del codice di una calcolatrice che funziona sulla riga di comando. Funziona bene e la matematica è corretta ma è un po 'ridondante:

switch(Operator)
 {
  case "+": result = num1 + num2;
  printResult();
  break;

  case "-" : result = num1 - num2;
  printResult();
  break;

  case "*":
  result = num1 * num2;
  printResult();
  break;

  case "/":
  result = num1 / num2;
  printResult();
  break;

  case "^":
  result = Math.Pow(num1, num2);
  printResult();
  break;

  case "root":
  result = Math.Pow(num1, (1/num2));
  Console.WriteLine("Root degree " + num2 + " of " + num1 + " is " + result);
  break;

  default:
  Console.WriteLine("Invalid operator.");
  break;

}//END SWITCH       

C'è un modo per evitare questo codice ridondante come

result = num1 Operator num2;

o

for char o = Operator
result = num1 Operator num2;

Anche solo per le operazioni + - / *?

    
posta Newbie404 26.06.2016 - 15:44
fonte

1 risposta

1

Per prima cosa, rimuovi la duplicazione spostando PrintResult() sotto il tuo interruttore. Lo chiami ogni volta (quasi, dovrai renderlo un tocco più robusto immagino). Quindi, modifica il metodo per restituire un risultato. Questo metodo calcola le stampe e . Non dovrebbe, quello spezzare SRP.

Ora puoi creare un dizionario di funzioni da invocare.

var operations = new Dictionary<string, Func<int, int, double>>()
{
    { "+", (a, b) => a + b },
    { "-", (a, b) => a - b },
    //...
}

return operations[Operator](num1, num2);

Potrebbe non essere compilato, sto scrivendo sul mio telefono. Gestione delle eccezioni a sinistra su OP.

Ovviamente, se diventi davvero froggy, potresti creare un parser per calcolatrice e davvero esagerare con la soluzione.

    
risposta data 30.06.2016 - 12:57
fonte

Leggi altre domande sui tag