2012-03-06 23 views
11

बनाम जावा के भीतर मुझे आश्चर्य है अगर इनमें से जो अधिक कुशल है:दो बयान एक और बयान

if(something) 
    { 
     if(something) 
    } 

या

if((something) &&(something)) 

मैं सोच रहा था क्या गुण के लिए दोनों प्रदर्शन के संदर्भ में हैं । कौन से समाधान अलग-अलग डेटा ऑब्जेक्ट्स को बेहतर तरीके से उधार देते हैं।

+1

पहला तरीका आम तौर पर लोग हैं, जो पता नहीं है द्वारा लिखे कोड में देखा जाता है/समझते हैं कि '&&' ऑपरेटर शॉर्ट सर्किट। मैंने विरासत कोड में 15+ कैस्केडिंग 'if' ब्लॉक देखा है, और तुरंत उन्हें दूसरे तरीके से बदल दिया है। (इसके अलावा: वीबी.नेट 'और' ऐसा एक उदाहरण है जहां यह शॉर्ट-सर्किट नहीं करता है, लेकिन 'और भी' करता है) – Seph

उत्तर

19

प्रदर्शन समान होगा। पहले कथन का मूल्यांकन किया जाएगा और केवल तभी यह सच होगा जब दूसरे का मूल्यांकन किया जाएगा।

यह केवल पठनीयता का सवाल है। जब तक कि पहला कथन सत्य नहीं होता है, तब तक ऐसा करने की ज़रूरत नहीं होती है, दूसरी बात पर ध्यान दिए बिना, मैं दोनों के साथ एक ही पंक्ति में जाऊंगा क्योंकि यह स्पष्ट है कि दोनों बयानों को कुछ होने के लिए सच होना चाहिए। आपको अनावश्यक रूप से इंडेंट करने की ज़रूरत नहीं है।

+2

+1: सबसे सरल मामले में बाइट कोड समान है –

+0

मुझे लगता है कि दो 'if' कथन पठनीयता के लिए बेहतर है अगर कुछ शर्तों को एकाधिक बूलियन परिचालनों का उपयोग करके चेक किया जाता है और कई स्थितियां हैं। उदाहरण के लिए, यह जांचने के लिए कि "संख्या 2 की शक्ति है" और "आकार सकारात्मक है", मुझे लगता है कि अगर कोई लिखता है (पायथन) "अगर num> 0 और num और (num-1) == 0 और आकार == 0: ... " – Sean

2

जावा में, && शॉर्ट सर्किट। इसका मतलब है कि अगर a && b में पहली स्थिति false का मूल्यांकन करती है, तो दूसरी स्थिति का भी मूल्यांकन नहीं किया जाता है।

इसलिए, दोनों लगभग निश्चित रूप से समान कोड में परिणाम देते हैं, और इसमें कोई प्रदर्शन अंतर नहीं है।

दो रूपों में से, आपको स्पष्ट कोड में जो भी परिणाम का उपयोग करना चाहिए।

2

सामान्य रूप से वे वही हैं। यदि पहले व्यक्ति का मूल्यांकन गलत है, तो दूसरे का मूल्यांकन नहीं किया जाएगा। यदि आप कुछ ऐसा करना चाहते हैं यदि पहला झूठा है, तो आपको अलग-अलग if-statement का उपयोग करना चाहिए। अन्यथा, अगर आप केवल यह सुनिश्चित करना चाहते हैं कि दोनों सत्य हैं और उनमें से कोई भी झूठी वापसी नहीं करता है, तो आप दूसरे विकल्प का उपयोग कर सकते हैं।

1

ध्यान दें कि जावा में && ऑपरेटर एक शॉर्ट सर्किट ऑपरेटर है। इसका मतलब है कि अगर && के बाईं तरफ की अभिव्यक्ति false है, तो जावा दाएं तरफ के विस्तार का मूल्यांकन करने के लिए परेशान नहीं होगा, क्योंकि इसका परिणाम false होगा, इससे कोई फर्क नहीं पड़ता कि सही हाथ की अभिव्यक्ति का मूल्यांकन क्या होता है ।

तो, प्रभावी रूप से, इन दो निर्माणों का प्रदर्शन समान होगा।

ध्यान दें कि जावा में & ऑपरेटर भी है। वह शॉर्ट सर्किट नहीं करता है: यह हमेशा & के दोनों किनारों पर अभिव्यक्तियों का मूल्यांकन करेगा।

0

मैं नहीं जानता लेकिन, अंतर्ज्ञान द्वारा, मुझे लगता है कि एक बार बाईटकोड में संकलित वहाँ कोई अंतर नहीं है ...