2012-01-11 20 views
5

I Frecuentes tiene que hacer algo como esto,doble si la condición, alguna manera de hacerlo en 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 
     } 
    } 

Básicamente, solamente la comprobación de si (condición2) se repite en ambos casos, y dosomething es diferente en todos 4 lugares, es decir, código1, código2, código3, código4 son todos códigos diferentes.

Entonces, ¿hay alguna forma de hacerlo compacto y legible O está bien?

Gracias.

Después de revisar e interpretar las respuestas, me pregunto si esta pregunta tiene algún sentido. Me siento estúpido ahora.

+1

Um ... si tiene el mismo código en ambas ramas ¿por qué necesito el primero si? – Tudor

+0

Lo siento, si no está claro, actualicé la pregunta ahora. Básicamente, estaba buscando la misma condición2 en dos lugares, así que pensé que la mayor parte debería evitar la doble verificación. – newcoderintown

+1

¿Es parte de condition2 en ambos casos lo mismo? –

Respuesta

5

para su caso específico, la mejor alternativa es:

YA NO artículo se refiere - válido para el caso en que dosomething aquí 1 era el mismo con dosomething aquí 3

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

Para los casos menos simples , puede agrupar las condiciones juntas:

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

aunque no sé si esto es más legible.

Si son necesarias más condiciones, he visto código como este:

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

No sé si la pregunta cambió pero su primer ejemplo no parece ser lo mismo ... Si c2 es verdadero, entonces el suyo ignora el estado de c1 que la publicación original no lo hace. Editar/Nota: No había visto la última actualización con código en los bloques else, en cuyo caso definitivamente no coincide. ;-) – Chris

+0

@Chris la pregunta sí cambió, hacer algo 1 y 3 era lo mismo en el original. –

+0

@Chris: Sí, la pregunta se modificó. Puede ver las ediciones para obtener más información. –

3

NUEVO COMO RESPUESTA PREGUNTA fue editado

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 
} 

siguiente código ya no es válida AS pregunta tiene ¡CAMBIADO!

que haría:

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

Eso es por tu pregunta específica, para los problemas más complejos de la solución podría ser diferente

+0

Gracias @Chris He editado mi respuesta de acuerdo con la pregunta editada. – SERPRO

Cuestiones relacionadas