अशक्त वस्तु पैटर्न का प्रयोग करें न कि ब्लॉकों को आजमाएं/पकड़ें

अशक्त ऑब्जेक्ट पैटर्न एक डिज़ाइन पैटर्न है जिसका उपयोग उस स्थिति को संभालने के लिए किया जाता है जब कोई वस्तु अशक्त या अपरिभाषित होती है। पैटर्न के पीछे मूल विचार एक अशक्त वस्तु बनाना है जिसमें मूल वस्तु के समान इंटरफ़ेस हो, लेकिन जब इसके तरीकों को कहा जाता है तो यह कुछ भी नहीं करता है। यह कोड में अशक्त वस्तुओं की जांच करने की आवश्यकता से बचा जाता है और डिजाइन को सरल करता है।
try/catch
यदि हम अशक्त वस्तु पैटर्न नहीं जानते हैं, तो हम त्रुटि परिदृश्यों से निपटने के लिए नीचे दिए गए तरीके से कोड लिखेंगे :

उपरोक्त कोड का आउटपुट है:
An error occurred creating the account: Username is required
उपरोक्त कोड की समस्या यह है कि: हर बार जब हम उपयोग करते हैं create_account
, तो हमें try/catch
अपवादों को पकड़ने के लिए उपयोग करना पड़ता है। अगर हमें create_account
कुछ प्रोजेक्ट्स में कई बार इस्तेमाल करना पड़े तो इससे निपटना काफी जटिल हो जाएगा।
उपरोक्त कोशिश/पकड़ समस्या को कैसे हल करें?
यह तब होता है जब अशक्त वस्तु पैटर्न उपयोग में आता है। आइए उपरोक्त मामले को और अधिक व्यावहारिक उपयोग में विस्तारित करें।
अगर हम try/catch
अपवाद बढ़ाने के लिए ब्लॉक का उपयोग करते हैं:

अशक्त वस्तु पैटर्न का उपयोग करने के लिए:

उपरोक्त रीफैक्टरिंग के बाद, हमने calculate_total_balance
अशक्त वस्तु पैटर्न का उपयोग करके फ़ंक्शन को सरल बनाया है class NullAccount
। हमें केवल त्रुटियों से निपटने के लिए ब्लॉकों की आवश्यकता नहीं है try
, और हम मान सकते हैं कि Account.from_string
हमेशा एक वैध वस्तु लौटाएगा।
यह क्लाइंट कोड को हर समय None
या मूल्यों की जांच किए बिना वास्तविक वस्तु की तरह अशक्त वस्तु का इलाज करने की अनुमति देता है। null
अशक्त वस्तु एक सुरक्षित डिफ़ॉल्ट व्यवहार प्रदान करती है, और इसे वास्तविक वस्तु उपलब्ध होने तक प्लेसहोल्डर के रूप में उपयोग किया जा सकता है।
गो में अशक्त वस्तु पैटर्न क्यों नहीं है?
गो में, एक फ़ंक्शन से कई मान वापस करना आम बात है, दूसरा मान एक बूलियन है जो सफलता या विफलता का संकेत देता है। इस पैटर्न को "कॉमा-ओके" या "ट्यूपल" पैटर्न कहा जाता है। उदाहरण के लिए, एक फ़ंक्शन जो मानचित्र में एक कुंजी को देखता है, मान लौटा सकता है और एक बूलियन इंगित करता है कि कुंजी मिली या नहीं। यह दृष्टिकोण अशक्त वस्तु पैटर्न की आवश्यकता को समाप्त करता है।
इसके अलावा, गो में एक अंतर्निहित nil
मूल्य है, जिसका उपयोग मूल्य की अनुपस्थिति या कमी का प्रतिनिधित्व करने के लिए किया जा सकता है। गो nil
एक अशक्त वस्तु पैटर्न शुरू करने के बजाय इस मूल्य का उपयोग करने के लिए प्रोत्साहित करता है, क्योंकि यह कोड को सरल करता है और जटिलता को कम करता है।