Non, il n'y a pas de directive standard
Cependant, certaines techniques peuvent rendre une fonction avec beaucoup de paramètres plus supportable.
Vous pouvez utiliser un paramètre list-if-args (args *) ou un paramètre dictionary-of-args (kwargs **
)
Par exemple, en python:
// Example definition
def example_function(normalParam, args*, kwargs**):
for i in args:
print 'args' + i + ': ' + args[i]
for key in kwargs:
print 'keyword: %s: %s' % (key, kwargs[key])
somevar = kwargs.get('somevar','found')
missingvar = kwargs.get('somevar','missing')
print somevar
print missingvar
// Example usage
example_function('normal parameter', 'args1', args2,
somevar='value', missingvar='novalue')
Les sorties:
args1
args2
somevar:value
someothervar:novalue
value
missing
Ou vous pouvez utiliser la syntaxe de définition littérale d'objet
Par exemple, voici un appel JavaScript jQuery pour lancer une demande AJAX GET:
$.ajax({
type: 'GET',
url: 'http://someurl.com/feed',
data: data,
success: success(),
error: error(),
complete: complete(),
dataType: 'jsonp'
});
Si vous regardez la classe ajax de jQuery, il y a beaucoup (environ 30) propriétés supplémentaires qui peuvent être définies; principalement parce que les communications ajax sont très complexes. Heureusement, la syntaxe littérale des objets facilite la vie.
C # intellisense fournit une documentation active des paramètres, il n’est donc pas rare de voir des arrangements très complexes de méthodes surchargées.
Les langages à typage dynamique comme python / javascript n’ont pas cette capacité, il est donc beaucoup plus courant de voir les arguments de mot-clé et les définitions littérales d’objet.
Je préfère les définitions littérales d'objet ( même en C # ) pour la gestion de méthodes complexes, car vous pouvez voir explicitement quelles propriétés sont définies lorsqu'un objet est instancié. Vous devrez faire un peu plus de travail pour gérer les arguments par défaut, mais à long terme, votre code sera beaucoup plus lisible. Avec les définitions littérales d'objet, vous pouvez cesser de dépendre de la documentation pour comprendre ce que fait votre code à première vue.
IMHO, les méthodes surchargées sont fortement surestimées.
Remarque: Si je me souviens bien, le contrôle d'accès en lecture seule devrait fonctionner pour les constructeurs littéraux d'objets en C #. Ils fonctionnent essentiellement de la même manière que la définition des propriétés dans le constructeur.
Si vous n'avez jamais écrit de code non trivial dans un langage Java / typé dynamiquement (python) et / ou fonctionnel / prototype, je vous suggère fortement de l'essayer. Ce peut être une expérience enrichissante.
Il peut être effrayant d’abord de rompre votre dépendance à l’égard des paramètres pour l’initialisation de la fonction / méthode, mais vous apprendrez à en faire beaucoup plus avec votre code sans ajouter de complexité inutile.
Mise à jour:
J'aurais probablement dû fournir des exemples pour illustrer l'utilisation dans un langage à typage statique, mais je ne pense pas actuellement à un contexte à typage statique. En gros, j'ai trop travaillé dans un contexte typé dynamiquement pour basculer subitement.
Ce que je ne sais est objet syntaxe de définition littérale est tout à fait possible dans les langues statiquement typés (au moins en C # et Java) parce que je les ai utilisés auparavant. Dans les langages à typage statique, ils sont appelés "initialiseurs d'objet". Voici quelques liens pour montrer leur utilisation en Java et en C # .