2009-12-22 12 views
13

क्या कई स्थितियों को संभालने के दौरान if-else और केस कथन का उपयोग करने के बीच कोई प्रदर्शन अंतर है?यदि बनाम केस स्टेटमेंट

कौन सा पसंदीदा है?

+12

यह बहुत अधिक भाषा-निर्भर स्विच/केस स्टेटमेंट अलग-अलग भाषाओं में अलग-अलग काम करता है - उदाहरण के लिए, कुछ भाषाओं में आप एओएन स्ट्रिंग स्विच कर सकते हैं, अन्य में आप नहीं कर सकते हैं। –

उत्तर

25

दिए गए संदर्भ में सबसे अधिक पढ़ने योग्य व्यक्ति का उपयोग करें।

+0

आपके सभी लोगों के उत्तर के लिए धन्यवाद अगर केस और केस स्टेटमेंट – fealin

+0

का उपयोग करने में बहुत मददगार हैं, हालांकि मैं सहमत हूं - यह वास्तव में प्रश्न का उत्तर नहीं देता था। सवाल प्रदर्शन लाभ के बारे में था। –

+1

इस जवाब के बाद सवाल उठाया गया था, जोर पर जोर देना। –

27

कुछ भाषाओं में, सी, switch संभवतः तेज़ हो सकता है क्योंकि इसे आमतौर पर jump table के साथ कार्यान्वित किया जाता है। कभी-कभी आधुनिक कंपाइलर कई if एस के लिए उपयोग करने के लिए पर्याप्त स्मार्ट होते हैं।

और वैसे भी इससे कोई फर्क नहीं पड़ता, माइक्रो ऑप्टिमाइज़ेशन (लगभग) कभी उपयोगी नहीं होते हैं।

5

कुछ प्रोग्रामिंग भाषाएं तब प्रतिबंधित होती हैं जब आप switch/case कथन का उपयोग कर सकते हैं। उदाहरण के लिए, कई सी-जैसी भाषाओं में case मान संकलन समय पर ज्ञात निरंतर पूर्णांक होना चाहिए।

प्रदर्शन विशेषताओं दो तकनीकों के बीच भिन्न हो सकता है, लेकिन आप पहले से भविष्यवाणी करने में सक्षम होने की संभावना नहीं है कि वे क्या हैं। यदि आपके आवेदन में इस कोड के लिए प्रदर्शन वास्तव में महत्वपूर्ण है, तो सुनिश्चित करें कि प्रोफ़ाइल निर्णय लेने से पहले दोनों दृष्टिकोण हैं, क्योंकि उत्तर आपको आश्चर्यचकित कर सकते हैं।

आम तौर पर, प्रदर्शन अंतर बहुत मामूली हो जाएगा, और आप इसलिए सबसे, पठनीय समझ में आता है और पोषणीय कोड का चयन करना चाहिए के रूप में आप काफी किसी भी अन्य प्रोग्रामिंग स्थिति में होना चाहिए।

7

जब आपके पास एक से अधिक ifelse है, तो मैं स्विच/चयन की अनुशंसा करता हूं। फिर फिर, यह हमेशा काम नहीं करता है।

आप ऐसा ही कुछ मान लीजिए (अनुशंसित नहीं लेकिन उदाहरण के लिए केवल)

If a > 0 and b > 0 then 

' blabla 
ElseIf b = -5 then 

' blabla2 
ElseIf a = -3 and b = 6 then 

End If 

एक स्विच का उपयोग करते हुए/चुनिंदा जाने का रास्ता नहीं है। हालांकि, जब इस

select case a 

     case 1: 
      ' blabla 
     case 2: 
      ' blabla2 
     case 3: 
      ' blabla3 
     case 4: 
      ' blabla4 
     case else: 
end select 

उन मामले में की तरह एक चर के लिए एक विशिष्ट मूल्य के लिए क्वेरी, मैं इसकी अनुशंसा करते हैं क्योंकि यह अन्य लोगों के लिए और अधिक पठनीय है।

0

मैं यहां कुछ उत्तरों में जोड़ूंगा। यह एक प्रदर्शन प्रश्न नहीं है, और यदि आप वास्तव में प्रदर्शन के बारे में चिंतित हैं ... एक परीक्षा लिखें और देखें कि तेज़ कौन सा है।

हालांकि, यह एक प्रश्न होना चाहिए जिसके बारे में उपयोग करना उचित है, जो बेहतर नहीं है। यदि आपके पास एकाधिक/यदि कथन हैं तो अपने आप को एक पक्ष दें और केस स्टेटमेंट का उपयोग करें। यदि यह आसान है तो/else और फिर if/else का उपयोग करें। आप बाद में धन्यवाद देंगे।

3

case या switch कथन वास्तव में "if .. elseif ..." संरचनाओं के केवल विशेष मामले हैं जिनका उपयोग आप कर सकते हैं जब एक ही ऑब्जेक्ट की तुलना प्रत्येक शाखा में एक अलग साधारण मूल्य से की जा रही है, और यह सब कुछ है किया जा रहा है। उनका उपयोग करने के बारे में अच्छी बात यह है कि अधिकांश कंपाइलर उन्हें कूद तालिकाओं के रूप में कार्यान्वित कर सकते हैं, इसलिए प्रभावी रूप से पूरे 200 (या हालांकि कई) शाखा जांच को एक टेबल इंडेक्सिंग ऑपरेशन के रूप में कार्यान्वित किया जा सकता है, और एक कूद।

कारण है कि, यदि आप एक case कथन का उपयोग करने के लिए आप

  1. कर सकते हैं और
  2. शाखाओं में से एक काफी बड़ी संख्या में है जब चाहते हैं।

"elseif" की संख्या जितनी अधिक होगी, case कथन अधिक आकर्षक होगा।

3

केस स्टेटमेंट आमतौर पर पठनीयता के लिए पसंद किए जाते हैं और यदि कोई गति अंतर होता है तो आमतौर पर तेज़ होते हैं, लेकिन यह हर संभव वातावरण पर लागू नहीं होता है।

आप शायद एक परीक्षण लिख सकते हैं जो दिखाता है कि आपके पर्यावरण के लिए कौन सा तेज़ है, लेकिन कैशिंग और कंपाइलर अनुकूलन से सावधान रहें।

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