Die mathematische Operation Substraktion kenne ich nicht - ist das Rechnen mit Teilstrings? ;-)
Um die gewünschten Ergebniseigenschaften zu erhalten, wirst Du bei Disvision und Substraktion nicht a
und b
zufällig bestimmen müssen, sondern b
und erwartet
, und a daraus rückrechnen. D.h. dein Rückgabeobjekt muss erweitert werden, so dass es auch die Operanden enthält. Ob du die rand()
Aufrufe dann auch in die Methoden verlegst, oder ob Du a und b nach wie vor übergibst, ist wohl Geschmackssache
Den Ansatz mit opMap.keys()
hatte ich zuerst auch (naja, eigentlich nicht, ich war auf getOwnPropertyNames
verfallen, was in diesem Fall zum gleichen Ergebnis geführt hätte; aber keys() ist natürlich sinnvoller). Problem ist nur, dass opMap.keys()
auch 'random' enthält, d.h. man läuft Gefahr, dass die Random-Operation sich selbst auswählt. Die Chance dafür ist natürlich gering ($$(\frac{1}{5})^k$$ für k-mal nacheinander), aber es widerstrebt mir irgendwie, korrekte Programmfunktion auf Wahrscheinlichkeiten aufzubauen bzw. eine unabsichtliche Rekursion einfach hinzunehmen. Das unit-testet sich so schlecht...
Eine Sache ist mir erst nachträglich aufgefallen: Es ist schlechter Stil, vielleicht sogar ein Bug, dass die Methoden in opMap
sich auf die Variable beziehen, in der ihr Objekt gespeichert ist. Statt dessen sollten sie this
verwenden.
Rolf