इस प्रकार के सिंटैक्स का उपयोग पहली जगह में करने के कारण कोई सुपर स्पष्ट कारण नहीं हैं ।
सामान्य तौर पर, बूलियन तर्क रखने से बचने की कोशिश करें जो थोड़ी दूरी पर मनमानी कर सकते हैं। includeManagement(सबसे अधिक संभावना) परिणाम को बहुत प्रभावित करेगा। लेकिन तर्क ऐसा लगता है कि यह "थोड़ा वजन" वहन करता है।
एक एनम के उपयोग पर चर्चा की गई है, न केवल यह तर्क की तरह दिखेगा "अधिक वजन वहन करता है", बल्कि यह विधि को स्केलेबिलिटी भी प्रदान करेगा। हालाँकि यह सभी मामलों में सबसे अच्छा समाधान नहीं हो सकता है, क्योंकि आपके ReturnEmployeeIds-मिथोड को -enum के साथ-साथ स्केल करना होगा WhatToInclude(देखें निकलेसज का जवाब)। इससे आपको बाद में सिरदर्द हो सकता है।
इस पर विचार करें: यदि आप WhatToInclude-enum को मापते हैं, लेकिन ReturnEmployeeIds-method को नहीं । यह तब ArgumentOutOfRangeException(सर्वोत्तम मामला) फेंक सकता है या पूरी तरह से अवांछित ( nullया खाली List<Guid>) कुछ वापस कर सकता है । जो कुछ मामलों में प्रोग्रामर को भ्रमित कर सकता है, खासकर यदि आपका ReturnEmployeeIdsक्लास-लाइब्रेरी में है, जहां स्रोत-कोड आसानी से उपलब्ध नहीं है।
WhatToInclude.Traineesयदि WhatToInclude.Allकोई ऐसा करता है तो यह मान लेगा कि प्रशिक्षु सभी का "उपसमूह" है।
यह (ज़ाहिर है), कैसे ReturnEmployeeIds लागू किया जाता है पर निर्भर करता है।
उन मामलों में जहां एक बूलियन तर्क पारित किया जा सकता है, मैं आपके मामले में इसे दो तरीकों (या अधिक, यदि आवश्यक हो) में तोड़ने की कोशिश करता हूं; कोई निकाल सकता है ReturnAllEmployeeIds, ReturnManagementIdsऔर ReturnRegularEmployeeIds। यह सभी आधारों को शामिल करता है और जो कोई भी इसे लागू करता है, वह पूरी तरह से आत्म-व्याख्यात्मक होता है। यह भी "स्केलिंग" नहीं होगा, जैसा कि ऊपर उल्लेख किया गया है।
चूंकि बूलियन तर्क रखने वाली किसी चीज़ के लिए केवल दो परिणाम होते हैं । दो तरीकों को लागू करना, बहुत कम अतिरिक्त प्रयास लेता है।
कम कोड, शायद ही कभी बेहतर होता है।
साथ यह कहा, वहाँ हैं कुछ मामलों में जहां स्पष्ट रूप से तर्क की घोषणा पठनीयता में सुधार। उदाहरण के लिए विचार करें। GetLatestNews(max: 10)। GetLatestNews(10)है अभी भी बहुत आत्म व्याख्यात्मक, की स्पष्ट घोषणा maxइच्छा मदद स्पष्ट किसी भी भ्रम की स्थिति।
और अगर आपके पास पूरी तरह से एक बूलियन तर्क होना चाहिए , जिसका उपयोग सिर्फ पढ़ने से trueया अनुमान नहीं किया जा सकता है false। तब मैं कहूंगा कि:
var ids = ReturnEmployeeIds(includeManagement: true);
.. बिल्कुल बेहतर है, और इससे अधिक पठनीय है:
var ids = ReturnEmployeeIds(true);
दूसरे उदाहरण में, trueइसका मतलब बिल्कुल कुछ भी हो सकता है । लेकिन मैं इस तर्क से बचने की कोशिश करूंगा।
booleanविधि तर्क का उपयोग करना चाहिए , और कैसे?