यदि प्रश्न प्रतीत होता है, तो "मैं एक विधि से जानकारी के दो असंबंधित टुकड़े कैसे लौटाता हूं जो एक एकल इंट लौटाता है? मैं कभी भी अपने रिटर्न मूल्यों की जांच नहीं करना चाहता हूं, और नल खराब हैं, उनका उपयोग न करें।"
आइए देखें कि आप क्या पास करना चाहते हैं। आप या तो एक इंट, या एक गैर-अंतर तर्क पारित कर रहे हैं कि आप इंट क्यों नहीं दे सकते। यह सवाल जोर पकड़ता है कि केवल दो कारण होंगे, लेकिन किसी ने भी, जो कभी भी एक पहेली बना चुका है, जानता है कि कोई भी सूची बढ़ेगी। अन्य तर्क निर्दिष्ट करने के लिए स्कोप सिर्फ समझ में आता है।
शुरू में, ऐसा लगता है कि यह अपवाद फेंकने के लिए एक अच्छा मामला हो सकता है।
जब आप कॉलर को कुछ विशेष बताना चाहते हैं जो रिटर्न प्रकार में नहीं है, तो अपवाद अक्सर उपयुक्त प्रणाली हैं: अपवाद केवल त्रुटि राज्यों के लिए नहीं हैं, और आपको यह बताने के लिए बहुत सारे संदर्भ और तर्क वापस करने की अनुमति देते हैं कि आप बस क्यों कर सकते हैं 'आज इंट।
और यह केवल एक प्रणाली है जो आपको गारंटीड-वैध इनट्स वापस करने की अनुमति देता है, और गारंटी देता है कि प्रत्येक इंट ऑपरेटर और विधि जो कि इन्ट्स लेता है, इस पद्धति के रिटर्न वैल्यू को कभी भी अमान्य मानों जैसे नल, या जादू मूल्यों की जांच किए बिना स्वीकार कर सकता है।
लेकिन अपवाद वास्तव में केवल एक वैध समाधान हैं यदि, जैसा कि नाम से पता चलता है, यह एक असाधारण मामला है, न कि व्यवसाय का सामान्य कोर्स।
और एक कोशिश / पकड़ और हैंडलर केवल एक चेक के रूप में बहुत बॉयलरप्लेट है, जो कि पहले स्थान पर आपत्ति की गई थी।
और यदि कॉल करने वाले के पास कोशिश / कैच नहीं है, तो कॉल करने वाले के कॉल करने वाले के पास और इतने पर है।
एक भोला दूसरा पास है "यह एक माप है। नकारात्मक दूरी माप की संभावना नहीं है।" तो कुछ माप Y के लिए, आप बस के लिए const हो सकते हैं
- -1 = अज्ञात,
- -2 = मापना असंभव,
- -3 = उत्तर देने से इनकार कर दिया,
- -4 = ज्ञात लेकिन गोपनीय,
- -5 = चंद्रमा चरण के आधार पर बदलता है, तालिका 5 ए देखें,
- -6 = चार आयामी, शीर्षक में दिए गए माप,
- -7 = फाइल सिस्टम रीड एरर,
- -8 = भविष्य के उपयोग के लिए आरक्षित,
- -9 = वर्ग / घन इसलिए Y X के समान है,
- -10 = एक मॉनिटर स्क्रीन है इसलिए एक्स, वाई माप का उपयोग नहीं कर रहा है: एक्स का उपयोग स्क्रीन विकर्ण के रूप में करें,
- -11 = एक रसीद के पीछे माप लिखी और इसे अवैधता में बदल दिया गया, लेकिन मुझे लगता है कि यह या तो 17 साल की थी या 34,
- -12 = ... आपको विचार मिलता है।
यह वह तरीका है जो बहुत सी पुरानी प्रणालियों में किया जाता है, और यहां तक कि आधुनिक प्रणालियों में भी जहां इंट करने के लिए एक वास्तविक बाधा होती है, और आप इसे किसी प्रकार की संरचना या सनक में नहीं लपेट सकते।
यदि माप नकारात्मक हो सकते हैं, तो आप बस अपने डेटा प्रकार को बड़ा बनाते हैं (जैसे कि लंबे समय तक इंट) और जादू के मान इंट की सीमा से अधिक होते हैं, और आदर्श रूप से कुछ मूल्य के साथ शुरू होते हैं जो डिबगर में स्पष्ट रूप से दिखाई देंगे।
हालांकि, केवल जादू की संख्या होने के बजाय उन्हें एक अलग चर के रूप में होने के अच्छे कारण हैं। उदाहरण के लिए, सख्त टाइपिंग, स्थिरता, और उम्मीदों के अनुरूप।
हमारे तीसरे प्रयास में, हम उन मामलों को देखते हैं जहां गैर-अंतर मूल्यों के लिए व्यापार का सामान्य कोर्स है। उदाहरण के लिए, यदि इन मानों के संग्रह में कई गैर-पूर्णांक प्रविष्टियाँ हो सकती हैं। इसका मतलब है कि एक अपवाद हैंडलर गलत दृष्टिकोण हो सकता है।
उस मामले में, यह एक संरचना के लिए एक अच्छा मामला दिखता है जो इंट, और तर्क को पारित करता है। फिर, यह औचित्य सिर्फ ऊपर की तरह एक कास्ट हो सकता है, लेकिन दोनों को एक ही इंट में रखने के बजाय, आप उन्हें एक संरचना के अलग-अलग हिस्सों के रूप में संग्रहीत करते हैं। प्रारंभ में, हमारे पास नियम है कि यदि तर्क सेट किया जाता है, तो इंट सेट नहीं किया जाएगा। लेकिन हम अब इस नियम से बंधे नहीं हैं; यदि आवश्यक हो तो हम मान्य संख्याओं के लिए भी युक्तिसंगतता प्रदान कर सकते हैं।
किसी भी तरह से, हर बार जब आप इसे कॉल करते हैं, तो आपको अभी भी बॉयलरप्लेट की आवश्यकता होती है, यह देखने के लिए औचित्य का परीक्षण करने के लिए कि क्या इंट वैध है, तो बाहर खींच लें और अगर इंटिनेशन का उपयोग करें तो राशन हमें देता है।
यह वह जगह है जहां आपको "शून्य का उपयोग न करें" के पीछे अपने तर्क की जांच करने की आवश्यकता है।
अपवादों की तरह, अशक्त एक असाधारण स्थिति को इंगित करने के लिए है।
यदि कोई कॉलर इस पद्धति को कॉल कर रहा है और संरचना के "औचित्य" भाग को पूरी तरह से अनदेखा कर रहा है, बिना किसी त्रुटि से निपटने के लिए एक संख्या की उम्मीद करता है, और इसे एक शून्य मिलता है, तो यह शून्य को एक संख्या के रूप में संभाल लेगा, और गलत होगा। यदि यह एक जादू की संख्या हो जाता है, यह एक नंबर के रूप में इलाज करेंगे, और गलत होगा। लेकिन अगर यह शून्य हो जाता है, तो यह गिर जाएगा , क्योंकि यह अच्छी तरह से करना चाहिए।
इसलिए हर बार जब आप इस पद्धति को कॉल करते हैं, तो आपको इसके रिटर्न वैल्यू के लिए चेक में रखना होगा, हालांकि आप अमान्य मानों को संभालते हैं, चाहे वह इन-बैंड या बैंड से बाहर हो, कोशिश करें / पकड़ें, एक "तर्क" घटक के लिए संरचना की जांच, इंट की जाँच एक जादू की संख्या के लिए, या एक अशक्त के लिए एक int की जाँच ...
एक आउटपुट के गुणन को संभालने के लिए विकल्प, जिसमें एक अवैध इंट हो सकता है और "मेरा कुत्ता इस माप को खा गया है" जैसा तर्क है, उस संरचना के लिए गुणन ऑपरेटर को ओवरलोड करना है।
... और फिर आपके आवेदन में हर दूसरे ऑपरेटर को अधिभारित करें जो इस डेटा पर लागू हो सकता है।
... और फिर उन सभी तरीकों को अधिभारित करें जो स्याही ले सकते हैं।
... और उन सभी ओवरलोड्स को अभी भी अमान्य ints के लिए जाँचों को शामिल करने की आवश्यकता होगी , ताकि आप इस एक तरीके की वापसी प्रकार का इलाज कर सकें जैसे कि आप इसे कॉल करते समय बिंदु पर हमेशा एक वैध इंट थे।
इसलिए मूल आधार विभिन्न तरीकों से गलत है:
- यदि आपके पास अमान्य मान हैं, तो आप उन अमान्य मानों की जाँच करने से बच सकते हैं जहाँ आप मानों को संभाल रहे हैं।
- यदि आप एक इंट के अलावा कुछ भी वापस कर रहे हैं, तो आप एक इंट वापस नहीं कर रहे हैं, इसलिए आप इसे इंट की तरह व्यवहार नहीं कर सकते। ऑपरेटर ओवरलोडिंग आपको बहाना देता है, लेकिन यह सिर्फ दिखावा है।
- मैजिक नंबर्स (NULL, NAN, Inf ...) के साथ एक इंट अब वास्तव में एक इंट नहीं है, यह एक गरीब व्यक्ति की संरचना है।
- नल से बचने से कोड अधिक मजबूत नहीं होगा, यह बस ints के साथ समस्याओं को छिपाएगा, या उन्हें एक जटिल अपवाद-हैंडलिंग संरचना में स्थानांतरित कर देगा।