Nein, es gibt keine Standardrichtlinie
Es gibt jedoch einige Techniken, die eine Funktion mit vielen Parametern erträglicher machen können.
Sie können einen list-if-args-Parameter (args *) oder einen Dictionary-of-args-Parameter (kwargs **
) verwenden.
Zum Beispiel 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')
Ausgänge:
args1
args2
somevar:value
someothervar:novalue
value
missing
Sie können auch die Syntax der Objektliteraldefinition verwenden
Beispiel: Hier ist ein JavaScript jQuery-Aufruf zum Starten einer AJAX GET-Anforderung:
$.ajax({
type: 'GET',
url: 'http://someurl.com/feed',
data: data,
success: success(),
error: error(),
complete: complete(),
dataType: 'jsonp'
});
Wenn Sie sich die Ajax-Klasse von jQuery ansehen, gibt es eine Menge (ungefähr 30) mehr Eigenschaften, die festgelegt werden können. Meistens, weil Ajax-Kommunikationen sehr komplex sind. Glücklicherweise macht die Objekt-Literal-Syntax das Leben leichter.
C # intellisense bietet eine aktive Dokumentation der Parameter, sodass es nicht ungewöhnlich ist, sehr komplexe Anordnungen überladener Methoden zu sehen.
Dynamisch getippte Sprachen wie Python / Javascript verfügen nicht über solche Funktionen. Daher werden häufig Schlüsselwortargumente und Objektliteraldefinitionen angezeigt.
Ich bevorzuge Objektliteraldefinitionen ( auch in C # ) für die Verwaltung komplexer Methoden, da Sie explizit sehen können, welche Eigenschaften festgelegt werden, wenn ein Objekt instanziiert wird. Sie müssen ein wenig mehr arbeiten, um mit Standardargumenten umzugehen, aber auf lange Sicht wird Ihr Code viel besser lesbar sein. Mit Objektliteraldefinitionen können Sie Ihre Abhängigkeit von der Dokumentation aufheben, um auf den ersten Blick zu verstehen, was Ihr Code tut.
IMHO sind überladene Methoden hoch überbewertet.
Hinweis: Wenn ich mich recht erinnere, sollte die schreibgeschützte Zugriffssteuerung für Objektliteralkonstruktoren in C # funktionieren. Sie funktionieren im Wesentlichen genauso wie das Festlegen von Eigenschaften im Konstruktor.
Wenn Sie noch nie nicht-trivialen Code in einer dynamisch (Python) und / oder funktionalen / prototypischen JavaScript-basierten Sprache geschrieben haben, empfehle ich dringend, ihn auszuprobieren. Es kann eine aufschlussreiche Erfahrung sein.
Es kann beängstigend sein, zuerst das Vertrauen in die Parameter für den End-All-All-Ansatz zur Funktions- / Methodeninitialisierung zu brechen, aber Sie werden lernen, mit Ihrem Code noch viel mehr zu tun, ohne unnötige Komplexität hinzufügen zu müssen.
Aktualisieren:
Ich hätte wahrscheinlich Beispiele liefern sollen, um die Verwendung in einer statisch typisierten Sprache zu demonstrieren, aber ich denke derzeit nicht in einem statisch typisierten Kontext. Grundsätzlich habe ich in einem dynamisch getippten Kontext zu viel Arbeit geleistet, um plötzlich zurückzuschalten.
Was ich weiß , ist, dass die Syntax der Objektliteraldefinition in statisch typisierten Sprachen (zumindest in C # und Java) vollständig möglich ist, da ich sie zuvor verwendet habe. In statisch typisierten Sprachen werden sie "Objektinitialisierer" genannt. Hier sind einige Links, um ihre Verwendung in Java und C # zu zeigen .