2012-01-11 19 views
5

frequenty muszę zrobić coś takiego,podwójnie jeśli warunek, jakiś sposób, aby to krótki

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

Zasadniczo, tylko sprawdzenie, czy (warunek2) powtarza się w obu przypadkach, a doSomething różni się w ogóle 4 miejsca tj. Kod1, kod2, kod3, kod4 to wszystkie różne kody.

Czy jest i tak, aby był zwarty i czytelny? Czy to dobrze?

Dzięki.

Po przejrzeniu i przejrzeniu odpowiedzi, zastanawiam się teraz, czy to pytanie w ogóle ma sens. Teraz czuję się głupio.

+1

Um ... jeśli mają ten sam kod w obu gałęziach dlaczego potrzebujesz pierwszego, jeśli? – Tudor

+0

Przepraszam, jeśli nie jest jasne, zaktualizowałem pytanie. Zasadniczo sprawdzałem dla tego samego warunku2 w dwóch miejscach, więc myślałem, że najbardziej jest sposób na uniknięcie podwójnego sprawdzenia. – newcoderintown

+1

Czy inne części warunku 2 w obu przypadkach są takie same? –

Odpowiedz

5

dla konkretnego przypadku, najlepszym rozwiązaniem jest:

JUŻ NIE DOTYCZY - obowiązuje dla przypadku, gdy doSomething tutaj 1 samo było z doSomething tu 3

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

Dla mniej prostych przypadkach można grupować warunki razem:

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

chociaż nie wiem, czy jest to bardziej czytelne.

Jeśli dalsze warunki są konieczne, widziałem kodu:

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

Nie wiem, czy pytanie się zmieniło, ale twój pierwszy przykład nie wydaje się być tym samym ... Jeśli c2 jest prawdziwe, to twój ignoruje stan c1, którego oryginalny post nie zawiera. Edycja/Uwaga: Nie widziałem najnowszej aktualizacji z kodem w innych blokach, w którym to przypadku na pewno nie pasuje. ;-) – Chris

+0

@Chris pytanie się zmieniło, zrób coś 1 i 3 były takie same w oryginale. –

+0

@ Chris: Tak, pytanie się zmieniło. Możesz zobaczyć zmiany, aby uzyskać więcej zrozumienia. –

3

NEW odpowiedź, pytanie było EDITED

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 
} 

następujący kod nie jest już ważna, kwestia ta ZMIENIONO!

zrobiłbym:

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

To dla konkretnego pytania, dla bardziej złożonych problemów, rozwiązaniem może być inna

+0

Dzięki @Chris Edytowałem swoją odpowiedź zgodnie z edytowanym pytaniem. – SERPRO

Powiązane problemy