2012-01-11 10 views
5

ho frequenty hanno a che fare qualcosa di simile,doppio se la condizione, un modo per farla breve

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 
     } 
    } 

In sostanza, solo il controllo di se (condizione2) è ripetuto in entrambi i casi, e dosomething è diversa in tutto 4 posti cioè code1, code2, code3, code4 sono tutti codici diversi.

Quindi, c'è comunque per renderlo compatto e leggibile O questo va bene?

Grazie.

Dopo aver esaminato le modifiche e aver esaminato le risposte, mi chiedo ora se questa domanda abbia senso. Mi sento stupido ora.

+1

Um ... se avete lo stesso codice in entrambi i rami perché ti bisogno del primo se? – Tudor

+0

Siamo spiacenti, se non chiaro, ho aggiornato la domanda ora. Fondamentalmente stavo controllando la stessa condizione2 in due punti, quindi pensavo che ci fosse un modo per evitare il doppio controllo. – newcoderintown

+1

Un'altra parte della condizione2 in entrambi i casi è la stessa? –

risposta

5

Per il vostro caso specifico, l'alternativa migliore è:

non si applica più - valido per il caso in cui dosomething qui 1 era lo stesso con dosomething qui 3

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

Per i casi meno semplici , è possibile raggruppare le condizioni insieme:

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

anche se non so se questo è più leggibile.

Se sono necessarie più condizioni, ho visto il codice come questo:

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

Non so se la domanda è cambiata ma il tuo primo esempio non sembra essere la stessa cosa ... Se c2 è vero, il tuo ignora lo stato di c1 che il post originale non ha. Modifica/Nota: non avevo visto l'ultimo aggiornamento con il codice nei blocchi else, nel qual caso sicuramente non corrisponde. ;-) – Chris

+0

@Chris la domanda è cambiata, fare qualcosa 1 e 3 erano gli stessi nell'originale. –

+0

@Chris: Sì, la domanda viene modificata. Puoi vedere le modifiche per maggiore comprensione. –

3

nuova risposta AS DOMANDA È REDATTA

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 
} 

SEGUENTE CODICE non è più valido AS DOMANDA HA CAMBIATO!

lo farei:

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

Questo è per la tua domanda specifica, per problemi più complessi la soluzione potrebbe essere diversa

+0

Grazie a @Chris ho modificato la mia risposta in base alla domanda modificata. – SERPRO