2013-07-28 13 views
5

क्या निम्नलिखित दो स्निपेट्स, या किसी दूसरे का उपयोग करने के किसी भी कारण के बीच कोई अंतर है?"अगर (foo) बार();" के बीच अंतर और "foo && bar();"

if (foo) { 
    bar(); 
} 

 

foo && bar(); 
+0

पहला और अधिक पारंपरिक है। प्रभावी रूप से, वे वही हैं, हालांकि। –

+0

कोई फर्क नहीं पड़ता लेकिन मैं एक पंक्ति 'if' कथन पसंद करता हूं। 'अगर (foo) बार();' – elclanrs

उत्तर

12

पहले फार्म के रूप में बिल्कुल वैसा ही में परिणाम दूसरा रूप short-circuit evaluation के रूप में जाना जाता है और। हालांकि पहला फॉर्म अधिक पठनीय है और इसे बनाए रखने के लिए प्राथमिकता दी जानी चाहिए।

इस प्रकार का शॉर्ट-क्यूरिकिट मूल्यांकन अक्सर if-statement में देखा जाता है, जहां दाहिने हाथ को सशर्त रूप से मूल्यांकन किया जाता है। नीचे उदाहरण देखें; बार का मूल्यांकन केवल तभी किया जाता है जब foo सही साबित हो।

if (foo && bar()) { 
    // ... 
} 
+0

+1 ग्रेट उत्तर। – Matt

+0

यह व्याकरण की भावना में बिल्कुल वही नहीं है। (* अभिव्यक्ति * बनाम * कथन *) – user123444555621

3

संस्करण foo && bar() एक अभिव्यक्ति है, और इस तरह एक मान है:

var result = foo && bar(); 

if संस्करण का उपयोग कर रहे हैं, इसके बाद के संस्करण इस प्रकार दिखाई देंगे:

var result; 
if (foo) { 
    result = bar(); 
} 

जो अधिक है वर्बोज़।

+1

असल में 'foo && bar(); 'एक कथन है, अभिव्यक्ति नहीं,' foo && bar() 'एक अभिव्यक्ति है। – zch

+0

@zch सही। यह एक [अभिव्यक्ति कथन] है (http://es5.github.io/#x12.4)। – user123444555621

+0

यदि-संस्करण सही नहीं है; अगर foo falsy है, तो झूठा मूल्य वापस आ गया है। इस प्रकार 'else {result = foo; } '। – bouke

1

शॉर्ट-कुइरकिट मूल्यांकन के साथ बुके का जवाब वास्तव में अच्छा है। लेकिन मुझे यह भी जोड़ना है कि एक अच्छी कोडिंग शैली if-statement का उपयोग है, यदि बार() के कॉल में कोई बूलियन-रिटर्न-वैल्यू नहीं है और बार() का उपयोग करके कोई और शर्त संतुष्ट नहीं होनी चाहिए।

संबंधित मुद्दे