Wenn ich eine Funktion habe, die möglicherweise einen bestimmten Parameter empfängt oder nicht, ist es besser, die Funktion zu überladen oder optionale Argumente hinzuzufügen?
Wenn jeder seine Höhen und Tiefen hat - wann würde ich jeden verwenden?
Wenn ich eine Funktion habe, die möglicherweise einen bestimmten Parameter empfängt oder nicht, ist es besser, die Funktion zu überladen oder optionale Argumente hinzuzufügen?
Wenn jeder seine Höhen und Tiefen hat - wann würde ich jeden verwenden?
Antworten:
Wenn die Sprache sie ordnungsgemäß unterstützt (z. B. Typensicherheit, falls zutreffend), würde ich aus folgenden Gründen optionale Argumente bevorzugen:
a
, b
und c
hat diese Möglichkeiten: nichts, a, b, c, ab, ac, bc, abc. Es ist 2^n
für verschiedene Typen, nichtn!
Angenommen, eine Konstruktorsituation: Ich wähle oft ein fließendes Builder-Muster, um Situationen mit vielen Optionen zu vermeiden.
Z.B. Ordering.natural().onResultOf(function).reverse().compound(Ordering.natural().onResultOf(function2))
ist ein Beispiel für den Aufruf einer in Guava implementierten fließenden Builder-Schnittstelle.
Natürlich benötigen Sie jetzt ein separates Objekt, um den Status Ihres Builders zu speichern, aber Sie reduzieren die Gesamtkomplexität, indem Sie das Konstruktionsverhalten vom Konstruktionsverhalten trennen.