Wie viele Funktionsparameter sind zu viele? [Duplikat]

7

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.

    
Chris Kloberdanz 25.11.2008, 21:47
quelle

15 Antworten

16

Ich weiß es nicht, aber ich weiß es, wenn ich es sehe.

    
Paul Tomblin 25.11.2008 21:51
quelle
15

Laut Steve McConnell in Code Complete sollten Sie

  

Begrenzen Sie die Anzahl der Routinen   Parameter bis etwa sieben

    
Paul Reiners 25.11.2008 21:51
quelle
7

Wenn du fragen musst, dann ist das wahrscheinlich zu viel.

    
Stephane Grenier 25.11.2008 22:21
quelle
4

Im Allgemeinen glaube ich, dass wenn die Parameter funktionell verwandt sind (z. B. Koordinaten oder Farbkomponenten), sie als Klasse für gute Maße eingekapselt werden sollten.

Nicht dass ich das immer selbst befolge;)

    
Uri 25.11.2008 21:56
quelle
2

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 >.

    
Kenny 25.11.2008 22:51
quelle
1

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.

    
Brian 25.11.2008 21:51
quelle
1

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.

    
scwagner 25.11.2008 21:53
quelle
1

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.

    
Patrick Desjardins 25.11.2008 21:54
quelle
0

Für mich ist 5.

Es ist schwer zu verwalten (erinnere mich an Name, Reihenfolge, etc.) darüber hinaus. Plus Wenn ich soweit komme habe ich Versionen mit Standardwerten, die diesen einen nennen.

    
OscarRyz 25.11.2008 21:57
quelle
0

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.

    
Ayo 25.11.2008 21:58
quelle
0

Es variiert von Person zu Person. Wenn ich Schwierigkeiten habe, sofort zu verstehen, was ein Funktionsaufruf tut, indem ich den Aufruf im Code lese, ist es an der Zeit, die grauen Zellen abzugleichen.

    
moffdub 25.11.2008 22:13
quelle
0

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.

    
Joachim Sauer 25.11.2008 22:42
quelle
0

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:

  • Wie leicht ist es, Anrufe zu verstehen, wenn ich Code lese?
  • Wie einfach ist es, sich beim Schreiben von Code die korrekten Argumente und die richtige Reihenfolge der Argumente zu merken?
Darron 25.11.2008 22:51
quelle
0

Und es hängt von der Programmiersprache ab. In C ist es wirklich nicht selten, Funktionen mit 7 Parametern zu sehen. Allerdings habe ich in C # selten mehr als 5 Parameter gesehen und ich persönlich benutze normalerweise weniger als 3.

%Vor%     
user35978 25.11.2008 22:57
quelle
-1

Ich würde sagen, maximal 4. Alles darüber sollte meiner Meinung nach innerhalb einer Klasse platziert werden.

    
Geo 25.11.2008 21:50
quelle

Tags und Links