ऐसा लगता है कि आपको कभी भी शून्य नहीं करना चाहिए और इसके बजाय हमेशा नल ऑब्जेक्ट पैटर्न का उपयोग करना चाहिए। संग्रह/मानचित्र/सरणी या बुलायन कार्यों जैसे कि प्रमाणीकृत(), which is shown here का उपयोग करते समय मैं एनओपी की उपयोगीता देख सकता हूं।नल ऑब्जेक्ट पैटर्न
मुझे इस पर कुछ भी नहीं मिला है जो पूरी तरह से आश्वस्त है। मेरे विचारों को व्यवस्थित करने की कोशिश करते हुए यहां मेरे साथ भालू।
मेरी समझ यह है कि एक शून्य वस्तु को वापस करने के बजाय, आप एक वैध वस्तु वापस कर देते हैं जिसे "शून्य" किया गया है।
Car car = getCar();
एनओपी का उपयोग नहीं यदि आप अगर वस्तु getCar (से लौटे जाँच करने की आवश्यकता होगी) किसी भी तरीकों कॉल करने से पहले रिक्त है:
उदाहरण के लिए, ग्राहक एक फोन एक वस्तु प्राप्त करने के लिए होगा इस पर:
if (car != null){
color = car.getColor();
doScreenStuff(color);
}
एनओपी का उपयोग करना, बजाय getCar()
अशक्त लौटने, यह अब एक वस्तु है कि प्रभावी ढंग से किया गया है देता है "बाहर ध्यान केंद्रित किया"। तो अब हमें if (car != null)
करने की आवश्यकता नहीं है और केवल रंग का अनुरोध कर सकते हैं। इसलिए, मुझे लगता है कि जब हम रंग कहते हैं तो हमारी "शून्य आउट" ऑब्जेक्ट "कोई नहीं" वापस आ जाएगी।
यह कैसे मदद करता है? ऐसा लगता है कि एक खाली वस्तु पर आगे बढ़ना और कॉलिंग विधियों का कारण सिर्फ इतना ही दर्द होता है जितना कि सिर्फ शून्य की जांच करता है। अब, जब सूचना प्रदर्शित करने का समय आता है, तो हमें यह जांचना होगा कि रंग "कोई नहीं" है, कि ऊंचाई 0 नहीं है, या आपके पास जो भी अन्य मूल्य हैं। इसलिए अनिवार्य रूप से, यदि कार शून्य है, तो प्रसंस्करण की शुरुआत में जांच करने की बजाय, आप बाद में जांच लें कि हमारे पास कार वस्तु असली कार या विकल्प है। अर्थात। हम खाली वस्तुओं का एक गुच्छा प्रदर्शित नहीं करना चाहते हैं, इसलिए हमें अपनी सभी खाली वस्तुओं को फ़िल्टर करने के लिए कुछ तरीका चाहिए।
यह फ़िल्टरिंग कॉल करने की तरह एक अतिरिक्त कदम है (कार! = शून्य)। केवल अंतर यह है कि शून्य की जांच के साथ, हम जल्द ही प्रसंस्करण रोक सकते हैं जैसे कि हम पाते हैं कि कार ऑब्जेक्ट अपवाद फेंक कर शून्य है, जबकि एनओपी के साथ हम खाली वस्तु पर विधियों को कॉल करते हैं और जब तक यह समय नहीं होता है तब तक चिपकते रहें ऑब्जेक्ट प्रदर्शित करें और इस बिंदु पर हम खालीियों को फ़िल्टर करते हैं। इसके अलावा, आपको अपनी खाली वस्तु द्वारा दिए गए मानों को जानने की आवश्यकता है। अर्थात। प्राप्त करता है रंग() वापसी "कोई नहीं" या "खाली"।
स्पष्ट रूप से कुछ ऐसा होना चाहिए जो मैं देख रहा हूं। अग्रिम धन्यवाद।
शून्य ऑब्जेक्ट पैटर्न और वैकल्पिक एक ही उद्देश्य की सेवा नहीं करते हैं। वैकल्पिक यह इंगित करने के लिए प्रयोग किया जाता है कि कोई मान मौजूद हो सकता है या नहीं। शून्य ऑब्जेक्ट पैटर्न बस इस तथ्य को एन्कोड कर रहा है कि वहां 'कुछ भी नहीं' वस्तु हो सकती है जो अभी भी उपयोगी व्यवहार है। – Cubic
क्षमा करें, मैंने खुद को स्पष्ट नहीं किया होगा, मैं कह रहा था कि शून्य जांच का विकल्प विकल्प है, और फिर शून्य ऑब्जेक्ट पैटर्न के लिए "यह शून्य ऑब्जेक्ट पैटर्न के लिए कोई प्रतिस्थापन नहीं है"। मैंने थोड़ी देर में शून्य ऑब्जेक्ट पैटर्न का उपयोग नहीं किया है क्योंकि मेरे पास हालिया उपयोग का मामला नहीं है, लेकिन मैं इसका मतलब यह नहीं बता रहा हूं कि विकल्प नल ऑब्जेक्ट पैटर्न को प्रतिस्थापित करते हैं। –