Herhangi bulunmamaktadır süper berrak ilk etapta sözdizimi bu tip kullanmak neden olarak nedenler.
Genel olarak, belirli bir mesafeden keyfi görünebilecek mantıklı argümanlara sahip olmaktan kaçının. includeManagement
(büyük olasılıkla) sonucu büyük ölçüde etkiler. Ancak argüman "az kilo" taşıyor gibi görünüyor.
Bir enum kullanımı tartışıldı, sadece "daha fazla ağırlık taşır" argümanı gibi görünmekle kalmayacak, aynı zamanda yönteme ölçeklenebilirlik sağlayacak. Ancak bu, her durumda en iyi çözüm olmayabilir, çünkü ReturnEmployeeIds
-metodunuz -enum ile birlikte WhatToInclude
ölçeklenmelidir ( NiklasJ'in cevabına bakınız ). Bu daha sonra başınızı ağrıtabilir.
WhatToInclude
Şunu düşünün: -enum'u ölçeklendirirseniz, ancak ReturnEmployeeIds
-metod'u ölçeklendirmezseniz. Daha sonra bir ArgumentOutOfRangeException
(en iyi durum) atabilir veya tamamen istenmeyen ( null
veya boş List<Guid>
) bir şey getirebilir . Bazı durumlarda programcının kafasını karıştırabilir, özellikle ReturnEmployeeIds
de bir sınıf kütüphanesinde iseniz , kaynak kodun hazır olmadığı yerlerde.
Birisi WhatToInclude.Trainees
işe WhatToInclude.All
yararsa, stajyerlerin hepsinin bir “altkümesi” olduğunu görerek çalışacağını varsayacaktır .
Bu (elbette), nasıl ReturnEmployeeIds
uygulandığına bağlıdır .
Bir boolean argümanının kabul edilebileceği durumlarda, sizin durumunuzda bunun yerine iki yönteme (veya gerekirse daha fazla) ayırmaya çalışıyorum; bir kişi ReturnAllEmployeeIds
, ReturnManagementIds
ve ReturnRegularEmployeeIds
. Bu, tüm temelleri kapsar ve uygulayan kişiye kesinlikle açıklayıcıdır. Bu aynı zamanda yukarıda belirtilen “ölçeklendirme” sırasına da sahip olmayacaktır.
Boolean argümanı olan bir şey için sadece iki sonuç olduğundan. İki yöntem uygulamak, çok az ekstra çaba gerektirir.
Daha az kod, nadiren daha iyidir.
Bu sözlerimle, orada vardır açıkça argüman ilan okunabilirliği artırır bazı durumlarda. Örneğin düşünün. GetLatestNews(max: 10)
. GetLatestNews(10)
olduğu hala yeterince açıklayıcı, açık beyanı max
irade yardımı temizlemek herhangi bir karışıklığı.
Ve eğer kesinlikle bir boolean argümanına sahip olmanız gerekiyorsa , bu kullanım sadece true
veya okuyarak çıkarılamaz false
. Sonra şunu söyleyebilirim:
var ids = ReturnEmployeeIds(includeManagement: true);
.. kesinlikle daha iyi ve daha fazla okunabilir:
var ids = ReturnEmployeeIds(true);
İkinci örnekte, true
kesinlikle bir şey ifade ediyor olabilir . Ancak bu tartışmadan kaçınmaya çalışırdım.
boolean
yöntem argümanları kullanmalı mı ve nasıl?