Nie, nie ma standardowych wytycznych
Ale istnieją pewne techniki, które mogą sprawić, że funkcja o wielu parametrach będzie bardziej znośna.
Możesz użyć parametru list-if-args (args *) lub parametru słownik-of-args (kwargs **
)
Na przykład w 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')
Wyjścia:
args1
args2
somevar:value
someothervar:novalue
value
missing
Lub możesz użyć składni definicji literału obiektu
Na przykład oto wywołanie JavaScript jQuery w celu uruchomienia żądania AJAX GET:
$.ajax({
type: 'GET',
url: 'http://someurl.com/feed',
data: data,
success: success(),
error: error(),
complete: complete(),
dataType: 'jsonp'
});
Jeśli spojrzysz na klasę ajax w jQuery, istnieje wiele (około 30) dodatkowych właściwości, które można ustawić; głównie dlatego, że komunikacja ajaxowa jest bardzo złożona. Na szczęście dosłowna składnia obiektu ułatwia życie.
Intellisense C # zapewnia aktywną dokumentację parametrów, więc często zdarza się, że widzimy bardzo złożone układy przeciążonych metod.
Dynamicznie pisane języki, takie jak python / javascript, nie mają takiej możliwości, więc o wiele bardziej powszechne są argumenty słów kluczowych i definicje literałów obiektowych.
Wolę definicje literału obiektu ( nawet w języku C # ) do zarządzania złożonymi metodami, ponieważ możesz wyraźnie zobaczyć, które właściwości są ustawiane, gdy obiekt jest tworzony. Będziesz musiał wykonać trochę więcej pracy, aby obsłużyć domyślne argumenty, ale na dłuższą metę twój kod będzie o wiele bardziej czytelny. Dzięki dosłownym definicjom obiektów możesz zerwać z zależnością od dokumentacji, aby zrozumieć, co robi Twój kod na pierwszy rzut oka.
IMHO, przeciążone metody są mocno przereklamowane.
Uwaga: Jeśli dobrze pamiętam, kontrola dostępu tylko do odczytu powinna działać dla konstruktorów dosłownych obiektów w języku C #. Działają one zasadniczo tak samo, jak ustawianie właściwości w konstruktorze.
Jeśli nigdy nie pisałeś żadnego trywialnego kodu w języku dynamicznie typowanym (python) i / lub funkcjonalnym / prototypowym języku opartym na javaScript, zdecydowanie polecam wypróbowanie go. To może być oświecające doświadczenie.
Najpierw przerażające może być przerwanie polegania na parametrach w podejściu do inicjalizacji funkcji / metody na końcu, ale nauczysz się robić o wiele więcej za pomocą swojego kodu bez konieczności dodawania niepotrzebnej złożoności.
Aktualizacja:
Prawdopodobnie powinienem był podać przykłady demonstrujące użycie w języku o typie statycznym, ale obecnie nie myślę w kontekście o typie statycznym. Zasadniczo wykonałem zbyt wiele pracy w dynamicznie wpisywanym kontekście, aby nagle wrócić.
Wiem , że składnia definicji literału obiektu jest całkowicie możliwa w językach o typie statycznym (przynajmniej w języku C # i Javie), ponieważ używałem ich wcześniej. W językach o typie statycznym nazywane są „inicjalizatorami obiektów”. Oto kilka linków pokazujących ich użycie w Javie i C # .