Hayır, standart bir kılavuz yok
Ancak birçok parametreye sahip fonksiyonu daha katlanılabilir hale getirebilecek bazı teknikler var.
Bir list-if-args parametresini (args *) veya bir args sözlük parametresini (kwargs **
) kullanabilirsiniz.
Örneğin, python'da:
// 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')
Çıktılar:
args1
args2
somevar:value
someothervar:novalue
value
missing
Veya nesne değişmez tanımı sözdizimini kullanabilirsiniz.
Örneğin, burada bir AJAX GET isteği başlatmak için bir JavaScript jQuery çağrısı:
$.ajax({
type: 'GET',
url: 'http://someurl.com/feed',
data: data,
success: success(),
error: error(),
complete: complete(),
dataType: 'jsonp'
});
JQuery'nin ajax sınıfına bakarsanız, ayarlanabilecek çok (yaklaşık 30) özellik vardır; çoğunlukla, ajax iletişimi çok karmaşık olduğu için. Neyse ki, nesne değişmez sözdizimi hayatı kolaylaştırır.
C # intellisense parametrelerin aktif belgelenmesini sağlar, bu yüzden aşırı yüklenmiş yöntemlerin çok karmaşık düzenlemelerini görmek nadir değildir.
Dinamik olarak python / javascript gibi yazılan dillerin böyle bir yeteneği yoktur, bu nedenle anahtar kelime argümanlarını ve nesne değişmez tanımlarını görmek çok daha yaygındır.
Bir nesnenin somutlaştırılması sırasında hangi özelliklerin ayarlandığını açıkça görebildiğiniz için karmaşık yöntemleri yönetmek için nesne değişmez tanımlarını ( C # bile) tercih ederim . Varsayılan argümanları ele almak için biraz daha iş yapmanız gerekecek, ancak uzun vadede kodunuz çok daha okunaklı olacaktır. Nesne değişmez tanımları ile, ilk bakışta kodunuzun ne yaptığını anlamak için belgelere bağımlılığınızı kırabilirsiniz.
IMHO, aşırı yüklenmiş yöntemler aşırı abartılıyor.
Not: Salt okunur hatırlıyorsam erişim kontrolü C # 'daki nesne değişmez yapıcıları için çalışmalıdır. Esasen yapıcıdaki ayar özellikleriyle aynı şekilde çalışırlar.
Dinamik olarak yazılmış (python) ve / veya fonksiyonel / prototip javaScript tabanlı bir dilde önemsiz olmayan bir kod hiç yazmadıysanız, denemenizi şiddetle tavsiye ederim. Aydınlatıcı bir deneyim olabilir.
Her şeyden önce, her şeyden önce işlevsellik yaklaşımı için parametrelere bağlılığınızı kırmak korkutucu olabilir, ancak gereksiz karmaşıklık eklemek zorunda kalmadan kodunuzla çok daha fazlasını yapmayı öğreneceksiniz.
Güncelleme:
Muhtemelen statik olarak yazılmış bir dilde kullanımı göstermek için örnekler vermeliydim ama şu anda statik olarak yazılmış bir bağlamda düşünmüyorum. Temelde, aniden geri dönmek için dinamik olarak yazılmış bir bağlamda çok fazla iş yapıyorum.
Ne yapmak biliyorum ben önce onları kullandık çünkü (en azından C # ve Java) literal tanım sözdizimi statik olarak yazılan dillerde tamamen mümkündür nesnesidir. Statik olarak yazılmış dillerde 'Nesne Başlatıcılar' olarak adlandırılırlar. Java ve C # kullanımlarını göstermek için bazı bağlantılar .