Ich habe eine Methode mit einem Flag-Argument. Ich denke, dass das Übergeben eines booleschen Wertes an eine Methode eine schlechte Übung ist (verkompliziert die Signatur, verstößt gegen das Prinzip "Jede Methode macht eine Sache"). Ich denke, die Methode in zwei verschiedene Methoden aufzuteilen ist besser. Aber wenn ich das tue, wären die beiden Methoden sehr ähnlich (Code Duplikation).
Ich frage mich, ob es einige allgemeine Techniken gibt, um Methoden mit einem Flag-Argument in zwei separate Methoden aufzuteilen.
Hier ist der Code meiner Methode (Java):
%Vor%Ich denke, es kommt auf jeden einzelnen Fall an.
In diesem Beispiel haben Sie meiner Meinung nach zwei Möglichkeiten.
Angenommen, Sie möchten den Aufruf calculateNumOfLiveOrDeadNeighbors()
in zwei:
%Vor%und
%Vor%Sie können die Vorlagenmethode verwenden, um die Schleife in eine andere Methode zu verschieben. Sie können damit in den beiden Methoden tote / lebende Zellen zählen.
%Vor% Es ist mühsam, vielleicht nicht einmal den Schmerz wert. Alternativ können Sie eine Monade verwenden, um die Ergebnisse Ihrer Statistikberechnung zu speichern und dann getDeadCounter()
zu verwenden. oder getLiveCounter()
auf der Monade, wie viele bereits vorgeschlagen haben.
Wenn Ihnen der Boolesche Wert Ihrer Signatur nicht gefällt, können Sie zwei verschiedene Methoden ohne diese hinzufügen, indem Sie auf private
die Hauptfunktion umgestalten:
ODER
Sie könnten eine Ergebnisklasse oder int-Array als Ausgabeparameter zum Speichern der beiden Ergebnisse codieren; Das würde Sie den lästigen booleschen Parameter loswerden lassen.
Im obigen Beispiel finde ich die zweite und dritte Option zutreffender.
Wie Bozho sagte: Aber aber kombinieren Punkt 2 und 3 anders herum:
Erstellen Sie eine (mögliche private Methode), die sowohl (lebend und tot) als auch (nur wenn Sie in den meisten Fällen tot oder lebendig brauchen) zwei Methoden hinzufügen, die tot oder beides aus dem Ergebnis auswählen:
%Vor%Was die Verwendung von Refactoring betrifft, sind einige Dinge, die Sie tun können:
Ich würde hier geneigt sein, eine Karte aus dem CellState-Enum zu zählen, dann fügen Sie das LIVE und das SICK oder das DEAD und das DEAD4GOOD nach Bedarf hinzu.
%Vor%Tags und Links java coding-style refactoring flags