Un ejemplo que siempre trato de hacer es reemplazar en gran medida anidado si es así (en realidad éste no es demasiado malo, pero los he visto hasta 8 o 9 niveles de profundidad en la naturaleza):
if (i == 1) {
// action 1
} else {
if (i == 2) {
// action 2
} else {
if (i == 3) {
// action 3
} else {
// action 4
}
}
}
con esto:
switch (i) {
case 1:
// action 1
break;
case 2:
// action 2
break;
case 3:
// action 3
break;
default:
// action 4
break;
}
también trato de mantener las acciones lo más pequeño posible (las llamadas a funciones son las mejores para esto) para mantener la sentencia switch comprimido (por lo que no tiene que ir por delante a cuatro páginas ver el final de esto).
Las tablas de decisiones, creo, simplemente están configurando indicadores que indican qué acciones deben tomarse más adelante. La sección "más adelante" es una secuencia simple de acciones basadas en esos indicadores. Podría estar equivocado (no será la primera ni la última vez :-).
Un ejemplo podría ser (la fase de establecimiento de bandera puede ser complicado si ya de sus acciones son muy simples):
switch (i) {
case 1:
outmsg = "no paper";
genmsg = true;
mailmsg = true;
phonemsg = false;
break;
case 2:
outmsg = "no ink";
genmsg = true;
mailmsg = true;
phonemsg = false;
break;
default:
outmsg = "unknown problem";
genmsg = true;
mailmsg = true;
phonemsg = true;
break;
}
if (genmsg)
// Send message to screen.
if (mailmsg)
// Send message to operators email address.
if (phonemsg)
// Hassle operators mobile phone.
Porque "else if" es malo, y debe escribirse como "else {if ...}"? Pero tienes razón al usar un interruptor para ifs simples como este. – JeeBee