2010-04-01 7 views

Répondre

5

Moins il y en a, mieux c'est, mais seulement si c'est logique. Je n'ai jamais entendu parler d'un nombre standard de paramètres à passer, mais j'ai entendu parler des moyens de les améliorer.

Par exemple, ne pas le faire:

public void DoSomething(string name, int age, int weight, ...) { } 

mais plutôt:

public void DoSomething(Person person) { } 

mais nous espérons que cela va sans dire. Mais aussi, je recommande de ne pas créer une classe bizarre juste pour réduire le nombre de paramètres.

+0

. Je trouve que lorsque j'ai besoin de beaucoup de paramètres, j'ai tendance à en avoir besoin à plusieurs endroits ou je dois constamment en ajouter d'autres. C'est pourquoi nous avons des choses comme le modèle EventArgs dans .NET. –

+0

C'est un bon point – Joel

+0

Joel: bon point dans votre réponse, mais j'ai déjà lu dans un article que si le nombre de paramètres est supérieur à 5 alors utilisez la structure. J'aime cette déclaration que si vous avez plus de 5 paramètres alors définissez struct et utilisez cette struct pour passer des paramètres. –

7

Code Complete suggère un maximum de 7. Cela est dû The Magical Number Seven, Plus or Minus Two:

... le nombre d'objets peut contenir un humain moyen en mémoire de travail est de 7 ± 2; C'est ce qu'on appelle souvent la loi de Miller.

Voici un extrait du code complet 2e édition:

limite le nombre de paramètres d'une routine à environ sept

Seven est un nombre magique pour la compréhension des gens. La recherche psychologique a révélé que les gens ne peuvent généralement pas suivre plus de sept segments d'information en même temps (Miller, 1956). Cette découverte a été appliquée à un très grand nombre de disciplines, et il semble raisonnable de supposer que la plupart des gens ne peuvent pas suivre plus de sept paramètres de routine à la fois.

+4

Si le nombre est de 7 ± 2, ne devrions-nous pas prendre l'extrémité inférieure et dire un maximum de 5? –

+0

@Jonathan Voir mes modifications. C'est en fait 7. –

+1

C'est tellement vrai. J'ai été une fois dans une classe alors que dans l'Air Force où l'instructeur a mis cette séquence sur le tableau, nous a demandé de le mémoriser puis de le répéter: C130KC10C140L1011C5. Dans l'armée de l'air, tout le monde ne voit pas d'avions, mais il se trouve que je rédige un programme sur les avions cargos. J'ai donc vu quelque chose de plus facile à retenir: C130, KC10, C140, L1011, C5 –

3

IMHO 5 à MAX. 6 est trop pour moi et 7 accablante!

+0

Donc, vous vous conformez à la loi Millers alors, comme Anton suggère :) – Default

+0

Yup Dude! La partie de la loi Millers que je n'aime pas est "7 + 2" c'est un trop grand nombre ...! –

1

Si vous souhaitez transmettre plusieurs fonctions à une fonction, vous pouvez envisager d'autres moyens de transférer ces données, par opposition à un simple passage de paramètre. Par exemple, dans certains cas, il peut être préférable de générer un fichier XML, puis de transmettre des valeurs liées à l'obtention de données autour de ce fichier XML. Si vous exécutez une application Web, il se peut que ce soit simplement en transmettant des données via des sessions ou en les publiant plutôt que de recevoir ou de recevoir des appels qui vous simplifieront la vie.

Vous pouvez également stocker certaines de ces informations en tant que variables de membre.

Je ne recommanderais pas plus de 4. Vous ne voulez pas que vos lignes dépassent 30 caractères à moins que vous générez une chaîne massive, mais même alors, il devient vraiment illisible et grossier (bien que nécessaire surtout pour le javascript).

1

Il est bon de programmer des programmes pour qu'ils soient faciles à lire. Personnellement, j'essaie de ne pas écrire des fonctions qui ont plus de paramètres que ce qui peut être affiché sur une ligne à l'écran. Habituellement, ce n'est pas plus de cinq ou six paramètres au plus.

0

Certains compilateurs ARM transmettent trois paramètres ou moins à l'aide de registres et trois sont empilés. L'appel de type empilé est plus lent que l'appel utilisant des registres. Dans ce cas, vous devez utiliser trois paramètres ou moins, pour la vitesse.

1

Selon le Code Clean - au maximum 3

+3

Bonne chance pour créer un constructeur 'Rectangle'. – kennytm

+0

Vous pouvez créer une classe, puis passer et objecter pour fonctionner – ilkin

0

Si vous ne savez pas combien de paramètres que vous allez passer à une utilisation pour envoyer la fonction param arguments variables à une méthode.

0

En fonction de l'architecture, plus de 1-3 provoquent le passage sur la pile. C'est plus lent que de passer par des registres. Du point de vue des performances, il est préférable de passer soit un pointeur vers une classe wrapper, soit un pointeur vers une structure. Cela garantit qu'une seule valeur est transmise et enregistre certaines écritures/lectures en mémoire.

Questions connexes