मैं सार्वजनिक रिलीज के लिए एक पुस्तकालय विकसित कर रहा हूं। इसमें ऑब्जेक्ट्स के सेट पर काम करने के लिए विभिन्न तरीके हैं - सेट को नए रूपों में बनाना, निरीक्षण करना, विभाजन करना और प्रोजेक्ट करना। यदि यह प्रासंगिक है, तो यह एक सी # क्लास लाइब्रेरी है, जिसमें लाइनक्यू-स्टाइल एक्सटेंशन है IEnumerable
, जिसे नूगेट पैकेज के रूप में जारी किया जाना है।
इस लाइब्रेरी के कुछ तरीकों को असंतोषजनक इनपुट पैरामीटर दिए जा सकते हैं। उदाहरण के लिए, कॉम्बिनेटरिक विधियों में, n आइटम के सभी सेट उत्पन्न करने के लिए एक विधि है जिसका निर्माण m आइटम के स्रोत सेट से किया जा सकता है । उदाहरण के लिए, सेट दिया गया:
1, 2, 3, 4, 5
और 2 के संयोजन के लिए पूछना होगा:
1, 2
1, 3
1, 4
आदि ...
5, 3
5, 4
अब, यह स्पष्ट रूप से कुछ ऐसा करने के लिए कहा जा सकता है, जैसे कि इसे 3 आइटम का एक सेट देना और फिर विकल्प सेट करते समय 4 वस्तुओं के संयोजन के लिए पूछना, यह कहता है कि यह केवल प्रत्येक आइटम का उपयोग कर सकता है।
इस परिदृश्य में, प्रत्येक पैरामीटर व्यक्तिगत रूप से मान्य है:
- स्रोत संग्रह शून्य नहीं है, और इसमें आइटम नहीं हैं
- संयोजनों का अनुरोधित आकार एक सकारात्मक गैर-पूर्णांक पूर्णांक है
- अनुरोधित मोड (प्रत्येक आइटम का केवल एक बार उपयोग करें) एक वैध विकल्प है
हालांकि, मापदंडों की स्थिति जब एक साथ ली जाती है तो समस्याएं पैदा होती हैं।
इस परिदृश्य में, क्या आप किसी अपवाद (जैसे। InvalidOperationException
) को फेंकने के लिए विधि की अपेक्षा करेंगे या एक खाली संग्रह लौटाएंगे? या तो मुझे मान्य लगता है:
- आप के संयोजन का उत्पादन नहीं कर सकते हैं n का एक सेट से आइटम मीटर आइटम जहां n> मी यदि आप केवल एक बार प्रत्येक आइटम उपयोग करने की अनुमति है, इसलिए इस ऑपरेशन असंभव समझा जा सकता है, इसलिए
InvalidOperationException
। - आकार के संयोजन के सेट n कि से उत्पादन किया जा सकता मीटर जब आइटम n> मी एक खाली सेट है, कोई संयोजन निर्मित नहीं किया जा सकता है।
खाली सेट के लिए तर्क
मेरी पहली चिंता यह है कि जब आप डेटासेट्स से अनजान आकार में हो सकते हैं, तो एक अपवाद विधियों के मुहावरेदार LINQ- शैली को परिभाषित करने से रोकता है। दूसरे शब्दों में, आप कुछ इस तरह से करना चाह सकते हैं:
var result = someInputSet
.CombinationsOf(4, CombinationsGenerationMode.Distinct)
.Select(combo => /* do some operation to a combination */)
.ToList();
यदि आपका इनपुट सेट परिवर्तनशील आकार का है, तो इस कोड का व्यवहार अप्रत्याशित है। यदि 4 से कम तत्वों के .CombinationsOf()
अपवाद को फेंकता है someInputSet
, तो यह कोड कभी-कभी कुछ पूर्व-जाँच के बिना रनटाइम पर विफल हो जाएगा । उपरोक्त उदाहरण में यह जाँच तुच्छ है, लेकिन यदि आप इसे LINQ की लंबी श्रृंखला से आधा नीचे बुला रहे हैं तो यह थकाऊ हो सकता है। यदि यह एक खाली सेट लौटाता है, तो result
खाली होगा, जिसे आप पूरी तरह से खुश हो सकते हैं।
एक अपवाद के लिए तर्क
मेरी दूसरी चिंता यह है कि एक खाली सेट लौटाने से समस्याएँ छिप सकती हैं - यदि आप इस विधि को LINQ की एक श्रृंखला से आधा कर रहे हैं और यह चुपचाप एक खाली सेट लौटाता है, तो आप कुछ चरणों में बाद में भाग सकते हैं, या अपने आप को एक खाली के साथ पा सकते हैं। परिणाम सेट, और यह स्पष्ट नहीं हो सकता है कि यह कैसे हुआ कि आपको निश्चित रूप से इनपुट सेट में कुछ मिला।
आप क्या उम्मीद करेंगे, और इसके लिए आपका क्या तर्क है?