2012-01-11 11 views
5

मैं इस तरह कुछ करने के लिए के सामान्य बनाने के लिए,डबल अगर हालत, किसी भी तरह से मूल रूप से यह कम

if(condition1) { 
     if {condition2) { //this condition is repeated again below 
      //dosomething here 1 code 1 
     } 
     else{ 
      //dosomething here 2 code 2 
     } 
    } 
    else { 
     if {condition2) { //same if condition as above 
      //dosomething here 3 code 3 
     } 
     else{ 
      //dosomething here 4 code 4 
     } 
    } 

, सिर्फ तभी जब (CONDITION2) दोनों मामले में दोहराया है के लिए जाँच, और DoSomething सब में अलग है 4 स्थान यानी कोड 1, कोड 2, कोड 3, कोड 4 सभी अलग कोड हैं।

तो, क्या यह कॉम्पैक्ट और पठनीय बनाने के लिए वैसे भी है या यह ठीक है?

धन्यवाद।

संपादन के माध्यम से जाने और उत्तर देखने के बाद, मुझे आश्चर्य है कि क्या यह सवाल भी समझ में आता है। मैं अब बेवकूफ महसूस करता हूँ।

+1

उम ... यदि आप दोनों शाखाओं में एक ही कोड है तुम क्यों करते हैं अगर पहले की जरूरत है? – Tudor

+0

क्षमा करें, अगर स्पष्ट नहीं है, तो मैंने अभी प्रश्न अपडेट किया है। असल में मैं दो स्थानों पर एक ही शर्त 2 की जांच कर रहा था, इसलिए मैं सोच रहा था कि डबल चेकिंग से बचने के लिए कुछ रास्ता है। – newcoderintown

+1

क्या दोनों मामलों में शर्त 2 का हिस्सा समान है? –

उत्तर

5

अपने विशिष्ट मामले के लिए, सबसे अच्छा विकल्प है:

नहीं अब इसपर लागू होता है - इस मामले में जहां यहां DoSomething 1 DoSomething यहाँ 3

if (c2) 
{ 
} 
else if (c1) 
{ 
} 
else 
{ 
} 

कम सरल मामलों के लिए के साथ एक ही था के लिए मान्य , आप एक साथ स्थितियों को समूहबद्ध कर सकते हैं:

if (c1 && c2) 
{ 
} 
else if (c1 && !c2) 
{ 
} 
else if (!c1 && c2) 
{ 
} 
else if (!c1 && !c2) 
{ 
} 

हालांकि मुझे नहीं पता कि यह अधिक पठनीय है या नहीं।

अधिक की स्थिति के लिए आवश्यक हैं, तो मैं इस तरह कोड को देखा है:

do { 
    if (c1) 
    { 
     //.... 
     break; 
    } 
    if (c2) 
    { 
     //.... 
     break; 
    } 
    //..... 
} while (false); 
+1

मुझे नहीं पता कि प्रश्न बदल गया है लेकिन आपका पहला उदाहरण एक ही चीज़ प्रतीत नहीं होता है ... यदि सी 2 सत्य है तो आपका सी 1 की स्थिति को अनदेखा करता है जो मूल पोस्ट नहीं करता है। संपादित/नोट: मैंने अन्य ब्लॉकों में कोड के साथ नवीनतम अपडेट नहीं देखा था, जिस स्थिति में यह निश्चित रूप से मेल नहीं खाता है। ;-) – Chris

+0

@ क्रिस प्रश्न बदल गया था, कुछ 1 और 3 मूल में समान थे। –

+0

@ क्रिस: हाँ सवाल बदल गया है। आप अधिक समझ के लिए संपादन देख सकते हैं। –

3

नया उत्तर प्रश्न के रूप में संपादित किया गया था

if (condition1 && condition2) 
{ 
    //dosomething here 1 code 1 
} 
else if (condition1 && !condition2) 
{ 
    //dosomething here 2 code 2 
} 
else if (!condition1 && condition2) 
{ 
    //dosomething here 3 code 3 
} 
else 
{ 
    //dosomething here 4 code 4 
} 

कोड निम्नलिखित अब वैध के रूप में प्रश्न किया गया है बदला हुआ!

मुझे क्या करना होगा:

if(condition2) 
{ 
    if(condition1) 
    { 
    //dosomething here 
    } 
    else 
    { 
    //dosomething here 2, 
    //which might be different than what we are doing above 
    } 
} 

अपने विशिष्ट प्रश्न के लिए है कि, और अधिक जटिल समस्याओं के लिए समाधान अलग हो सकता है

+0

धन्यवाद @ क्रिसिस मैंने संपादित प्रश्न के अनुसार अपना जवाब संपादित किया। – SERPRO

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