Ich habe gerade eine Funktion geschrieben, die mehrere Werte berücksichtigt und mich zum Nachdenken gebracht hat. Wann ist die Anzahl der Argumente für eine Funktion / Methode zu groß? Wann (wenn) signalisiert es ein fehlerhaftes Design? Konstruieren / refactorieren Sie die Funktion, um Structs, Arrays, Pointer usw. aufzunehmen, um die Anzahl der Argumente zu reduzieren? Refaktorieren Sie die eingehenden Daten nur, um die Anzahl der Argumente zu verringern? Es scheint jedoch, dass dies in OOP-Designs etwas weniger anwendbar ist. Nur neugierig, wie andere das Problem sehen.
BEARBEITEN: Als Referenz hat die Funktion, die ich gerade geschrieben habe, 5 Parameter verwendet. Ich benutze die Definition von mehreren, die mir mein AP Econ-Lehrer gegeben hat. Mehr als 2; weniger als 7.
Laut Steve McConnell in Code Complete sollten Sie
Begrenzen Sie die Anzahl der Routinen Parameter bis etwa sieben
Robert C. Martin (Onkel Bob) empfiehlt 3 als Maximum in Clean Code: Ein Handbuch der Agile Software Craftsmanship
Ich habe das Buch im Moment nicht bei mir, aber seine Argumentation hat mit ein, zwei und in geringerem Maße drei Argumentfunktionen zu tun, die gut und klar den Zweck der Funktion zeigen.
Dies geht natürlich Hand in Hand mit seiner Empfehlung von sehr kurzen, gut benannten Funktionen, die sich an den Single-Responsibility-Principal halten >.
Schnelle Antwort: Wenn Sie anhalten und diese Frage stellen müssen, haben Sie zu viele.
Ich persönlich halte die Nummer gerne unter sechs. Wenn mehr benötigt wird, hängt die Lösung vom Problem ab. Ein Ansatz besteht darin, "Setzer" -Funktionen zu verwenden, um einem Objekt die Werte zu geben, die eventuell die gewünschte Funktion ausführen. Eine andere Möglichkeit ist die Verwendung einer Struktur, wie Sie bereits erwähnt haben. Wie auch immer, Sie können nicht wirklich falsch liegen.
Nun, es hängt sehr wahrscheinlich davon ab, was Ihre Funktion macht, soweit wie viele als "zu viele" betrachtet werden. Nichtsdestoweniger ist es sicherlich möglich, eine Funktion mit vielen verschiedenen Parametern zu haben, bei denen es sich um Optionen handelt, wie bestimmte Fälle innerhalb der Funktion behandelt werden können und diese Funktionen mit normalen Standardwerten für diese Optionen überladen werden.
Mit der Verbreitung von Intellisense (oder gleichwertig in anderen IDEs) und Tooltips, die die Kommentare aus der XML-Dokumentation in Visual Studio zeigen, glaube ich nicht wirklich, dass es eine feste Antwort auf diese Frage gibt.
Zu viel Parameter ist ein "Code Smell".
Sie können in mehrere Methoden einteilen oder Klassen verwenden, um Variablen neu zu gruppieren, die etwas gemeinsam haben.
Eine Zahl für "Zu viel" zu setzen ist etwas sehr Subjektives und hängt von Ihrer Organisation und der Sprache ab, die Sie verwenden. Eine Faustregel ist, dass wenn Sie die Signatur Ihrer Methode nicht lesen können und eine Idee davon haben was macht es, als könnten Sie zu viele Informationen haben. Persönlich versuche ich, nicht über 5 Parameter zu gehen.
Hängt auch von der Funktion ab, wenn Ihre Funktion starke Benutzereingriffe oder Variablen erfordert, würde ich nicht über 7-8 gehen. Soweit die durchschnittliche Anzahl der Parameter zu gehen, ist 5-6 der Sweet Spot meiner Meinung nach. Wenn Sie mehr als das verwenden, sollten Sie Klassenobjekte als Parameter oder andere kleinere Funktionen betrachten.
Ich habe auch diese 7 Figur gehört, aber irgendwie habe ich das Gefühl, dass sie aus einer Zeit stammt, in der man nur primitive Werte passieren konnte.
Heutzutage können Sie einen Verweis auf ein Objekt übergeben, das einen komplexen Zustand (und Verhalten) einkapselt. Mit 7 davon wäre definitiv zu viel.
Mein persönliches Ziel ist es, mehr als vier zu vermeiden.
Es hängt stark von den Arten der Argumente ab. Wenn sie alle Ganzzahlen sind, dann kann 2 zu viel sein. (Wie kann ich mich erinnern, welche Reihenfolge?) Wenn irgendein Argument Null akzeptiert, dann fällt die Zahl drastisch.
Die wirkliche Antwort kommt von sich selbst zu fragen:
Tags und Links language-agnostic parameters