javascript - क्या जावास्क्रिप्ट समारोह से `अपरिभाषित` या` अशक्त` वापस करना बेहतर है?




function null (7)

मेरे पास एक फ़ंक्शन है जो मैंने लिखा है जो मूल रूप से इस तरह दिखता है:

function getNextCard(searchTerms) {
  // Setup Some Variables

  // Do a bunch of logic to pick the next card based on termed passed through what I'll call here as 'searchTerms' all of this logic is omitted because it's not important for my question.
  // ...

  // If we find a next card to give, than give it
  if (nextCardFound)
    return nextCardFound;

  // Otherwise - I'm returning undefined
  return undefined;
}

प्रश्न: क्या यहां "अशक्त" लौटना बेहतर होगा?

मैं जो कुछ भी वापस चाहता हूं उसे पास कर सकता हूं - जाहिर है ... मुझे यकीन नहीं था कि उपयोग करने के लिए सबसे अच्छी चीज क्या है।

इस फ़ंक्शन को कॉल करने वाला कोड अपरिभाषित से निपटना जानता है (यह वास्तव में वास्तव में कभी भी नहीं होगा जब तक कि कुछ बुरी तरह से गलत न हो)

यह प्रश्न पूछने का कारण यह है कि मैंने कहीं ऐसा कुछ सुना, जो "चर के लिए अपरिभाषित न हो" जैसा कुछ सुना हो - या कि यह डिबग करना कठिन बना देगा। तो, यह तथ्य कि मैं देख सकता हूं कि null हो जाता है वापस मुझे बताता है कि रिटर्न काम कर रहा है - लेकिन मूल रूप से undefined समान कार्य करता है।

प्रलेखन:

मोज़िला डॉक्स ने मेरे सवाल का जवाब नहीं दिया ... Google ने या तो नहीं किया: \

यह SO प्रश्न - क्या मैं यहाँ जानने की कोशिश कर रहा हूँ के लिए बहुत व्यापक था।


अपरिभाषित आम तौर पर एक ऐसी चीज को संदर्भित करता है जिसे अभी तक एक मूल्य (अभी तक) नहीं सौंपा गया है। नल से तात्पर्य किसी ऐसी चीज से है जिसका निश्चित रूप से कोई मूल्य नहीं है। उस स्थिति में, मैं एक अशक्त लौटने की सलाह दूंगा। ध्यान दें कि बिना किसी निर्दिष्ट रिटर्न वैल्यू के एक फंक्शन अव्यवस्थित रूप से अपरिभाषित रिटर्न देता है।

ECMAScript2015 कल्पना से

4.3.10 अपरिभाषित मूल्य

जब एक चर को एक मान नहीं सौंपा गया है तो आदिम मूल्य का उपयोग किया जाता है

4.3.12 शून्य मान

आदिम मूल्य जो किसी भी वस्तु मूल्य के जानबूझकर अनुपस्थिति का प्रतिनिधित्व करता है

http://www.ecma-international.org/ecma-262/6.0/#sec-terms-and-definitions-undefined-type

आगे की पढाई:

जावास्क्रिप्ट में अशक्त या अपरिभाषित का उपयोग कब किया जाता है?


इस बात पर निर्भर करता है कि यू को लौटे मूल्य के साथ क्या करना है।

टाइपोफ़ नल एक वस्तु देता है। उस वस्तु का अपरिभाषित मूल्य होता है

टाइपो अपरिभाषित रिटर्न अपरिभाषित


मुझे लगता है कि यह बहुत ही बहस का विषय है कि क्या उपयोग किया जाए। मैं ऐसा कोड पसंद करता हूं जो शब्दार्थ रूप से यथासंभव सटीक हो, इसलिए मुझे लगता है कि इस मामले में undefined उचित है।

मैं null असाइनमेंट के बारे में सोचता हूं जिसका अर्थ है "एक चर सेट से कुछ भी नहीं"। यह undefined अर्थ के विपरीत है "यह बात बिल्कुल नहीं है"

जैसा कि पिछले उत्तर में बताया गया है, undefined लौटने पर समस्याएँ होती हैं, और यह पूरी तरह से आपके ऊपर है कि क्या आपको परेशान करता है। यह मुझे परेशान नहीं करेगा।


मेरे अनुभव के अनुसार मेरी व्यक्तिगत राय अपरिभाषित और अशक्त नहीं है यदि आप अपने कोड को क्रैश नहीं करना चाहते हैं। कम से कम मैं व्यक्तिगत रूप से इससे बचता। जावास्क्रिप्ट में बहुत सारे कार्य हैं जो अपरिभाषित हैं और ठीक है हमें इसका उपयोग करना चाहिए। लेकिन जब आप अपना कोड डिज़ाइन करते हैं तो उसका उपयोग नहीं करते हैं। कम से कम कुछ "false" हमेशा वापस करना महत्वपूर्ण है। यदि आपके पास उदाहरण के लिए एक सरणी है और आप उस पर मैप करते हैं। [undefined, undefined.....] या सिर्फ undefined लौटना अच्छा नहीं है। यदि आप मूल सरणी के प्रकार को रखते हैं तो बेहतर है। उदाहरण:

 const mapper:Map <string[],boolean[]>  
['i', 'dont', 'use', 'null or undefined'] -> [false, true, false, true, false]
or ['', dont, '', '', use] 
or al the stuff above and then filter(v => v)
that will keep all undefined and null out

ये तो कमाल की सोच है। मैं इससे बचने के लिए हर समय कोशिश करता हूं। क्योंकि एक null या undefined आसानी से आपके कोड को क्रैश कर सकता है


मैं तर्क दूंगा कि इस मामले में, null वापस आ जाना चाहिए।

यदि आप सैद्धांतिक कंप्यूटर विज्ञान के दृष्टिकोण से प्रश्न पर विचार करते हैं, तो अनिर्धारित गैर-समाप्ति / गैर-कम्प्यूटेबिलिटी को इंगित करने के लिए उपयोग किया जाता है (अर्थात आंशिक फ़ंक्शन के अपरिभाषित बिंदु x के लिए प्लेसहोल्डर जिसे अक्सर लिखा जाता है f(x) = ⊥ )।

getNextCard हालांकि अगले कार्ड (अगर यह मौजूद है) की गणना करने में सक्षम है और अगर कोई अगला कार्ड नहीं है तो भी गणना करने में सक्षम हो सकता है। दूसरे शब्दों में, फ़ंक्शन total क्योंकि यह हर इनपुट के लिए समाप्त होता है।

यह कहा जा रहा है, सार्थक परिणाम के बिना एक विशेष मूल्य संकेतन समाप्ति (अर्थात "इस इनपुट के लिए मैं कोई कार्ड नहीं लौटा सकता हूं") की आवश्यकता है और यह मेरे लिए null नहीं है।

टिप्पणियाँ:

आप कुछ अन्य टाइप की गई भाषाओं में इस तर्क के लिए कुछ समर्थन देख सकते हैं, जहाँ सार्थक परिणाम के बिना समाप्ति को एक विकल्प प्रकार का उपयोग करके व्यक्त किया जाता है (कभी-कभी इसे अशक्त प्रकार भी कहा जाता है)। इसके लिए एक उदाहरण है शायद हास्केल में

दूसरी ओर, हम निश्चित रूप से नहीं जानते कि जावास्क्रिप्ट में undefined वास्तव में क्या मतलब है। तो, अपरिभाषित के लिए सादृश्य थोड़ा कठिन है। इसके अलावा, चूंकि हम हमेशा कुल कार्यों के साथ काम करना चाहते हैं, यह कहने के लिए कि "एक फ़ंक्शन से undefined कभी नहीं लौटना"। जो थोड़ा सख्त प्रतीत होता है, क्योंकि यह undefined गुणों / चर के उपयोग को सीमित कर देगा, जो सेट नहीं किए गए हैं।

अंत में, मेरी व्यक्तिगत पसंद undefined जहां मैं null लौट सकता हूं और मैं यह भी तर्क दूंगा कि यह बेहतर कोडिंग कन्वेंशन है (क्योंकि अन्य चीजों के बीच x !== null typeof x !== 'undefined' से छोटा है typeof x !== 'undefined' )।


मैं तर्क दूंगा कि कोई सबसे अच्छा तरीका नहीं है, और यहां तक ​​कि मानक कार्य कभी-कभी एक या दूसरे को चुनते हैं।

उदाहरण के लिए:

  • [[प्रोटोटाइप]]

    साधारण वस्तुओं में एक [[प्रोटोटाइप]] आंतरिक स्लॉट होता है, जो यह निर्धारित करता है कि उन्हें किस अन्य वस्तु से विरासत में मिला है। बेशक, यह कहने का एक तरीका होना चाहिए कि कोई वस्तु किसी अन्य से विरासत में नहीं मिलती है। इस मामले में, "ऐसी कोई वस्तु नहीं है" का उपयोग null का उपयोग करके किया जाता है।

  • Object.getOwnPropertyDescriptor

    यह एक संपत्ति विवरणक, अर्थात्, एक वस्तु है जो एक संपत्ति (उदाहरण के लिए मूल्य, योग्यता, गणना और विन्यास) का वर्णन करता है लौटने की उम्मीद है। हालांकि, संपत्ति मौजूद नहीं हो सकती है। इस मामले में, "ऐसी कोई संपत्ति नहीं है" को undefined का उपयोग करके दर्शाया गया है।

  • document.getElementById

    यह दिए गए आईडी के साथ तत्व को वापस करने की उम्मीद है। हालांकि, उस आईडी के साथ कोई तत्व नहीं हो सकता है। इस मामले में, "इस तरह का कोई तत्व नहीं है" null का उपयोग करके दर्शाया गया है।

इसलिए आप जो चाहें पसंद करें या अपने विशिष्ट मामले के लिए अधिक समझदारी चुनें।


undefined कुछ ऐसा नहीं है जिसे आपको असाइन करना चाहिए। आप undefined अलावा कुछ और वापस करने पर विचार कर सकते हैं। आपके मामले में, भले ही आप कुछ भी वापस न करें, परिणाम पहले से ही undefined होगा। इसलिए, मैं इसके बजाय null साथ जाने का सुझाव null

इस नमूने पर विचार करें,

function getSomething() {
     // .. do something
     return undefined;
}

function doSomething() {
     // .. I'm not gonna return anything.
}

var a = getSomething();
var b = doSomething();

a === b में नमूना परिणाम के ऊपर, जो undefined । अंतर यह है कि आप 1 स्टेटमेंट निष्पादन को बचाते हैं।








undefined