No, non ci sono linee guida standard
Ma ci sono alcune tecniche che possono rendere una funzione con molti parametri più sopportabili.
Potresti usare un parametro list-if-args (args *) o un parametro dictionary-of-args (kwargs **
)
Per esempio, in 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')
Uscite:
args1
args2
somevar:value
someothervar:novalue
value
missing
Oppure potresti utilizzare la sintassi della definizione letterale dell'oggetto
Ad esempio, ecco una chiamata jQuery JavaScript per avviare una richiesta GET AJAX:
$.ajax({
type: 'GET',
url: 'http://someurl.com/feed',
data: data,
success: success(),
error: error(),
complete: complete(),
dataType: 'jsonp'
});
Se dai un'occhiata alla classe ajax di jQuery ci sono un lotto (circa 30) più proprietà che possono essere impostate; soprattutto perché le comunicazioni ajax sono molto complesse. Fortunatamente, la sintassi letterale dell'oggetto rende la vita facile.
C # intellisense fornisce una documentazione attiva dei parametri, quindi non è raro vedere arrangiamenti molto complessi di metodi sovraccaricati.
Le lingue digitate dinamicamente come python / javascript non hanno tale capacità, quindi è molto più comune vedere gli argomenti delle parole chiave e le definizioni letterali degli oggetti.
Preferisco le definizioni letterali dell'oggetto ( anche in C # ) per la gestione di metodi complessi perché è possibile vedere esplicitamente quali proprietà vengono impostate quando un oggetto viene istanziato. Dovrai fare un po 'più di lavoro per gestire gli argomenti predefiniti, ma a lungo andare il tuo codice sarà molto più leggibile. Con le definizioni letterali dell'oggetto puoi interrompere la tua dipendenza dalla documentazione per capire cosa sta facendo il tuo codice a prima vista.
IMHO, i metodi sovraccaricati sono molto sopravvalutati.
Nota: se ricordo che readonly, il controllo degli accessi dovrebbe funzionare per i costruttori di oggetti letterali in C #. Funzionano essenzialmente allo stesso modo delle proprietà di impostazione nel costruttore.
Se non hai mai scritto alcun codice non banale in un linguaggio javaScript tipizzato dinamicamente (python) e / o funzionale / prototipo, consiglio vivamente di provarlo. Può essere un'esperienza illuminante.
Per prima cosa può essere spaventoso interrompere la dipendenza dai parametri per l'approccio completo alla funzione / metodo, ma imparerai a fare molto di più con il tuo codice senza aggiungere complessità inutile.
Aggiornamento:
Probabilmente avrei dovuto fornire esempi per dimostrare l'uso in un linguaggio tipizzato staticamente, ma al momento non sto pensando a un contesto tipizzato staticamente. Fondamentalmente, ho fatto troppo lavoro in un contesto tipizzato dinamicamente per tornare improvvisamente.
Quello che io do conosco è la sintassi della definizione letterale dell'oggetto è completamente possibile nei linguaggi tipizzati staticamente (almeno in C # e Java) perché li ho usati prima. Nei linguaggi tipizzati staticamente sono chiamati 'inizializzatori dell'oggetto'. Ecco alcuni link per mostrare il loro uso in Java e C # .