Aşırı Yük veya Opsiyonel Parametreler


10

Belirli bir parametreyi alabilen veya alamayan bir işleve sahip olduğumda, işlevi aşırı yüklemek veya isteğe bağlı bağımsız değişkenler eklemek daha iyi olur mu?

Her birinin iniş ve çıkışları varsa - her birini ne zaman kullanırım?


Optimizasyon açısından, isteğe bağlı parametrelere sahip olmak daha iyi bir seçenektir.
Maneet Puri

Yanıtlar:


12

Dil bunları uygun şekilde destekliyorsa (örneğin, tür güvenliği), aşağıdaki nedenlerden dolayı isteğe bağlı bağımsız değişkenleri tercih ederim:

  • Niyetinizi daha iyi iletirler, böylece kimse aşırı yükünüzün farklı bir şey yapacağından şüphelenmez (muhtemelen hiç de olmamalıdır).
  • Fonksiyon aşırı yükü yalnızca daha kapsamlı olana devredilse bile, bakım için daha az kod. İşlevi daha sonra yeniden adlandırmak isterseniz, bunu yapmak için en az 3 yeriniz vardır (iki tanım + bir çağrı).
  • Derleyici (varsa) daha küçük ikili dosyalar oluşturabilir.
  • İsteğe bağlı argümanlar en azından bazı dillerde daha iyi ölçeklenir. Karıştırma ve eşleştirme yeteneğine sahip 3 isteğe bağlı argüman istiyorsanız ne olur? Tam esneklik için bunu yapmak için 6 aşırı yüklemeye ihtiyacınız olacaktır.
  • Bir nesne yöntemi ise, birden fazla aşırı yükleme, alt sınıflarda geçersiz kılmaların uygulanmasını büyük ölçüde engelleyecektir.

8'e ihtiyacınız yok mu? Üç isteğe bağlı argümanlar a, bve cbu seçeneği vardır: hiçbir şey, a, b, c, ab, AC, bc, abc. Bu var 2^n, farklı türleri için değiln!
Mark

0

Yapıcı bir durum olduğunu varsayarsak: Birçok seçenekle durumları önlemek için genellikle akıcı bir oluşturucu deseni seçerim.

Örneğin. Ordering.natural().onResultOf(function).reverse().compound(Ordering.natural().onResultOf(function2))Guava'da uygulanan akıcı bir oluşturucu arabirimini çağırmaya bir örnektir.

Tabii ki şimdi, inşaatçınızın durumunu korumak için ayrı bir nesneye ihtiyacınız var, ancak inşa etme davranışını inşa edilenin davranışından ayırarak genel karmaşıklığı azaltırsınız.


Bu soruya cevap vermiyor.
Andy
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.