Ho bisogno di progettare una funzione per eseguire le operazioni aritmetiche di base che sono addition (+) , subtraction (-) , multiplication (x) e division (/) tra 2 numeri.
Quella funzione richiede 3 argomenti:
- number1 : composto da value e unit .
- number2 : composto di value e unit .
- operation_type : una delle 4 operazioni di cui sopra.
e dovrebbe tornare:
- number3 : composto da value e unit .
Restituire number3 's value è facile poichè tutto ciò che devo fare è usare istruzioni condizionali per eseguire l'operazione corrispondente (ad esempio if (operation_type == 'addition') { number3.value = number1.value + number2.value; } ).
Tuttavia ho difficoltà a capire come dovrei rappresentare e gestire il unit ( per multiplication e subtraction operazioni, come per addition e subtraction rimane uguale ) in modo che sia possibile associare più operazioni e aggiornare correttamente il unit risultante ogni volta. Ecco un esempio:
operations type: multiplications
number1.unit: Kw
number2.unit: h / user / year
number3.unit: Kwh / user / year _
|
number1.unit: Kwh / user / year <-
number2.unit: user
number3.unit: Kwh / year _
|
number1.unit: Kwh / year <-
number2.unit: year
number3.unit: Kwh
...
Il mio unico vincolo è che unit deve essere inizialmente rappresentato come string perché è archiviato nel database, quindi possiamo analizzarlo in object/array come necessario.
Alcuni dei problemi che sto affrontando:
Q1: come garantire un ordine coerente nell'unità risultante (ad esempio h x Kw e Kw x h dovrebbero entrambi dare Kwh )?
Q2: come gestire unità complesse (ad esempio foo / Kw x h / bar )?
E perché la speranza muore per ultimi:
Q3: esistono algoritmi / schemi di progettazione noti per affrontare questo?