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 ( nullveya boş List<Guid>) bir şey getirebilir . Bazı durumlarda programcının kafasını karıştırabilir, özellikle ReturnEmployeeIdsde bir sınıf kütüphanesinde iseniz , kaynak kodun hazır olmadığı yerlerde.
Birisi WhatToInclude.Traineesişe WhatToInclude.Allyararsa, 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, ReturnManagementIdsve 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ı maxirade yardımı temizlemek herhangi bir karışıklığı.
Ve eğer kesinlikle bir boolean argümanına sahip olmanız gerekiyorsa , bu kullanım sadece trueveya 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, truekesinlikle bir şey ifade ediyor olabilir . Ancak bu tartışmadan kaçınmaya çalışırdım.
booleanyöntem argümanları kullanmalı mı ve nasıl?