Angenommen, Sie haben Funktionen wie diese, die eine zunehmende Anzahl optionaler Parameter (und eine Pseudosprache, die keine optionalen Parameter und eine beliebige Anzahl von Parametern zulässt) annehmen:
function doStuff(Param a)
function doStuff(Param a, Param b)
function doStuff(Param a, Param b, Param c)
Was ist ein guter Weg, um sie zu einem einzigen Anruf zu vereinheitlichen? Ich kann mir zwei Designs vorstellen:
Durch alles fallen:
function doStuff(Param a)
doStuff(a, defaultB)
function doStuff(Param a, Param b)
doStuff(a, b, defaultC)
function doStuff(Param a, Param b, Param c)
// magic goes here
- Der Vorteil: Nicht viel Codeduplizierung, einfaches Ändern eines einzelnen Standardparameters.
- Der Nachteil: Viele Funktionsaufrufe können dazu führen, dass Stacktraces schwerer zu lesen oder unbrauchbar werden.
Oder rufen Sie direkt die 'letzte' Funktion auf:
function doStuff(Param a)
doStuff(a, defaultB, defaultC)
function doStuff(Param a, Param b)
doStuff(a, b, defaultC)
function doStuff(Param a, Param b, Param c)
// magic goes here
- Der Vorteil: Nicht viele Funktionsaufrufe, keine Sorge, wenn der Kette eine neue Funktion hinzugefügt wird.
- Der Nachteil: Viel Codeduplizierung, insbesondere die Standardwerte.
Woran habe ich nicht gedacht?
a
undb
keine angeben muss ), aber die erste Option gewinnt immer noch, um die Fehlerduplizierung zu minimieren. Übrigens, Tippfehler: Die Implementierung der mittleren Überlastung sollte zwischen den Beispielen identisch sein.