बात यह है कि वास्तव में मुझे सबसे कुछ प्रोग्रामिंग भाषाओं (जैसे सी #, जावास्क्रिप्ट) के बारे में परेशान करती है कि null
की संपत्ति का उपयोग करने की कोशिश कर रहा है का कारण बनता है एक त्रुटि या अपवाद होने के लिये है।क्यों नल की संपत्ति तक पहुंचने का प्रयास कुछ भाषाओं में अपवाद का कारण बनता है?
उदाहरण के लिए, निम्नलिखित कोड का टुकड़ा में,
foo = bar.baz;
अगर बार null
है, सी # एक बुरा NullReferenceException
और मेरे जावास्क्रिप्ट दुभाषिया Unable to get value of the property 'baz': object is null or undefined
साथ शिकायत फेंक देते हैं।
मैं की तरह
foo.bar.baz.qux
सिद्धांत रूप में इस बात को समझ सकते हैं, लेकिन असली कोड में मैं अक्सर कुछ हद तक गहरी वस्तुओं है, और अगर बीच foo
, bar
, या baz
किसी भी रिक्त है, मेरे कोड टूट रहे हैं। ।
true.toString() //evaluates to "true"
false.toString() //evaluates to "false"
null.toString() //should evaluate to "null", but interpreter spits in your face instead
मैं बिल्कुल इस समस्या को संभालने के लिए, हमेशा वर्बोज़ है, क्योंकि यह लेखन कोड घृणा, बदबूदार कोड: :(इसके अलावा, अगर मैं एक कंसोल में निम्न भाव का मूल्यांकन, वहाँ असंगत परिणाम होने लगते हैं
if (!(solvedPuzzles &&
solvedPuzzles[difficulty] &&
solvedPuzzles[difficulty][index])) {
return undefined;
}
return solvedPuzzles[difficulty][index].star
और
if (context != null &&
context.Request != null &&
context.Request.Cookies != null &&
context.Request.Cookies["SessionID"] != null)
{
SessionID = context.Request.Cookies["SessionID"].Value;
}
else
{
SessionID = null;
}
: निम्न काल्पनिक नहीं उदाहरण हैं, मैं अपनी परियोजनाओं में से एक (प्रथम, जावास्क्रिप्ट में है दूसरा सी # में है) से इन पकड़ा अगर पूरी अभिव्यक्ति
null
लौटे, तो गुण में से किसी एक अशक्त था
हालात इतना आसान नहीं होगा। उपर्युक्त कोड उदाहरण इतने सरल हो सकते थे:
return solvedPuzzles[difficulty][index].star;
//Will return null if solvedPuzzles, difficulty, index, or star is null.
SessionID = context.Request.Cookies["SessionID"].Value;
//SessionID will be null if the context, Request, Cookies,
//Cookies["SessionID"], or Value is null.
क्या मुझे कुछ याद आ रही है? क्यों इन भाषाओं इस व्यवहार के बजाय का उपयोग नहीं करते? क्या किसी कारण से इसे लागू करना मुश्किल है? क्या यह उन समस्याओं का कारण बनता है जिन्हें मैं देख रहा हूं?
श्रृंखला में उन सभी मूल्यों के लिए शून्य मान मान्य है? पहली जगह में नल स्टोर करना आसान नहीं है। फिर आप उन चेकों से पूरी तरह से बच सकते हैं। –
आप [नल ऑब्जेक्ट पैटर्न] (http://en.wikipedia.org/wiki/Null_Object_pattern) से प्यार करेंगे ... – fredoverflow
यह भाषा की गलती नहीं है जिसे आपने खाली संग्रह के बजाय शून्य संग्रह करने का निर्णय लिया है .. – canon