No, non esiste una linea guida standard
Ma ci sono alcune tecniche che possono rendere più sopportabile una funzione con molti parametri.
Puoi usare un parametro list-if-args (args *) o un parametro del dizionario di args (kwargs **
)
Ad 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 usare 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 molte (circa 30) più proprietà che possono essere impostate; principalmente perché le comunicazioni Ajax sono molto complesse. Fortunatamente, la sintassi letterale dell'oggetto semplifica la vita.
C # intellisense fornisce una documentazione attiva dei parametri, quindi non è raro vedere disposizioni molto complesse di metodi sovraccarichi.
I linguaggi tipizzati dinamicamente come python / javascript non hanno tale capacità, quindi è molto più comune vedere argomenti di parole chiave e definizioni letterali di oggetti.
Preferisco definizioni letterali di oggetti ( anche in C # ) per la gestione di metodi complessi perché puoi 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 di oggetti puoi interrompere la tua dipendenza dalla documentazione per capire cosa sta facendo il tuo codice a prima vista.
IMHO, i metodi sovraccarichi sono altamente sopravvalutati.
Nota: se ricordo bene il controllo dell'accesso in sola lettura dovrebbe funzionare per i costruttori letterali di oggetti in C #. Sostanzialmente funzionano come l'impostazione delle proprietà nel costruttore.
Se non hai mai scritto alcun codice non banale in un linguaggio basato su javaScript tipicamente dinamicamente (python) e / o funzionale / prototipo, ti consiglio vivamente di provarlo. Può essere un'esperienza illuminante.
Può essere spaventoso prima di tutto fare affidamento sui parametri per l'approccio end-all, be-all all'inizializzazione della funzione / metodo, ma imparerai a fare molto di più con il tuo codice senza dover aggiungere complessità inutili.
Aggiornare:
Probabilmente avrei dovuto fornire esempi per dimostrare l'uso in un linguaggio tipicamente statico, ma attualmente non sto pensando in un contesto tipicamente statico. Fondamentalmente, ho fatto troppo lavoro in un contesto tipizzato in modo dinamico per tornare all'improvviso.
Quello che non so è oggetto sintassi definizione letterale è completamente possibile in lingue staticamente tipizzati (almeno in C # e Java), perché li ho usato prima. Nei linguaggi tipicamente statici sono chiamati "inizializzatori di oggetti". Ecco alcuni link per mostrare il loro uso in Java e C # .