228 votes

Il y a trop de paramètres combien ?

Les Routines peuvent avoir des paramètres, c'est pas de nouvelles. Vous pouvez définir autant de paramètres que vous pouvez avoir besoin, mais trop d'entre eux feront de votre routine difficile à comprendre et à maintenir.

Bien sûr, vous pouvez utiliser une variable structurée comme une solution de contournement: en mettant tous ces variables dans une seule structure et en passant à la routine. En fait, en utilisant des structures de simplifier la liste des paramètres est l'une des techniques décrites par Steve McConnell dans le Code Complet. Mais comme il le dit:

Attention programmeurs d'éviter le regroupement de données de plus que ce qui est logiquement nécessaire.

Donc, si votre routine a trop de paramètres, ou si vous utilisez une structure de déguiser une grande liste de paramètres, vous êtes probablement fait quelque chose de mal. Qui est, vous êtes pas à garder le couplage lâche.

Ma question est, quand puis-je envisager une liste de paramètres trop grand? Je pense que plus de 5 paramètres sont trop nombreux. Qu'en pensez-vous?

162voto

Nick Points 4676

Quand est-ce quelque chose considérée, de manière obscène, de l'être quelque chose qui peut être régulée en dépit de la 1er Amendement de garantie de la liberté d'expression? Selon le juge Potter Stewart, "je le sais quand je la vois." Le même est ici.

Je déteste faire des règles strictes et rapides comme ça parce que la réponse change non seulement en fonction de la taille et de la portée de votre projet, mais je pense que ça change, même jusqu'au niveau du module. Selon ce que votre méthode est en train de faire, ou de ce que la classe est censée représenter, c'est tout à fait possible que 2 arguments, c'est trop et est un symptôme de trop de couplage.

Je dirais que, en posant la question, en premier lieu, et la qualification de votre question comme beaucoup comme vous l'avez fait, que vous connaissez vraiment tout cela. La meilleure solution ici est de ne pas compter sur un dur et rapide nombre, mais au lieu de regarder vers l'examen de la conception et de la révision du code parmi vos pairs afin d'identifier les domaines où vous avez le bas de la cohésion et de couplage.

N'ayez jamais peur de montrer à vos collègues de votre travail. Si vous avez peur, que c'est probablement le plus grand signe que quelque chose est incorrect avec votre code, et que vous le savez déjà.

124voto

Skizz Points 30682

Une fonction ne peut avoir trop de paramètres si certains de ces paramètres sont redondantes. Si tous les paramètres sont utilisés, la fonction doit avoir le bon nombre de paramètres. Prenez cela a souvent utilisé la fonction:

HWND CreateWindowEx
(
  DWORD dwExStyle,
  LPCTSTR lpClassName,
  LPCTSTR lpWindowName,
  DWORD dwStyle,
  int x,
  int y,
  int nWidth,
  int nHeight,
  HWND hWndParent,
  HMENU hMenu,
  HINSTANCE hInstance,
  LPVOID lpParam
);

12 paramètres (9 si vous boundle x,y,w et h comme un rectangle) et il y a aussi les paramètres dérivé du nom de la classe. Comment voulez-vous réduire? Voulez-vous réduire le nombre plus au point?

Ne laissez pas le nombre de paramètres vous dérange pas, assurez-vous qu'il est logique et bien documentées et laissez intellisense* vous aider.

  • Autre codage assistants sont disponibles!

106voto

Patrick McElhaney Points 22093

Dans le Code propre, Robert consacre quatre pages au sujet. Voici l’essentiel :

Le nombre idéal d’arguments d’une fonction est zéro (fonction). Vient ensuite un (monadique), suivie de près par deux (dyadique). Trois arguments (triadiques) doivent être évitées si possible. Plus de trois (polyadic) exige la justification particulière--et puis ne doit pas être utilisé en tout cas.

79voto

Jeffrey L Whitledge Points 27574

Certains code que j’ai travaillé dans le passé utilisé les variables globales juste pour éviter de passer trop de paramètres autour.

S’il vous plaît ne fais pas ça !

(En général).

38voto

Rob Walker Points 25840

Si vous commencez à avoir à compter les paramètres dans la signature mentalement et les faire correspondre à l’appel, alors il est temps à refactor !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X