Reemplazar condicional anidado con cláusulas de guarda.
Tienes un grupo de condicionales anidados y es difícil determinar el flujo normal de ejecución del código.
Aísla todas las comprobaciones especiales y los casos límite en cláusulas separadas y colócalas antes de las comprobaciones principales. Lo ideal es tener una lista «plana» de condicionales, uno tras otro.
##Example
public double getPayAmount() {
double result;
if (isDead){
result = deadAmount();
}
else {
if (isSeparated){
result = separatedAmount();
}
else {
if (isRetired){
result = retiredAmount();
}
else{
result = normalPayAmount();
}
}
}
return result;
}public double getPayAmount() {
if (isDead){
return deadAmount();
}
if (isSeparated){
return separatedAmount();
}
if (isRetired){
return retiredAmount();
}
return normalPayAmount();
}##Why Refactor
Detectar el «condicional infernal» es bastante fácil. Las indentaciones de cada nivel de anidamiento forman una flecha que apunta hacia la derecha, en la dirección del dolor y la desdicha:
if () {
if () {
do {
if () {
if () {
if () {
...
}
}
...
}
...
}
while ();
...
}
else {
...
}
}
Resulta difícil averiguar qué hace cada condicional y cómo, ya que el flujo «normal» de ejecución del código no es evidente de inmediato. Estos condicionales delatan una evolución caótica, en la que cada condición se añadió como un parche provisional sin pensar en optimizar la estructura global.
Para simplificar la situación, aísla los casos especiales en condiciones independientes que terminen la ejecución de inmediato y devuelvan un valor nulo si las cláusulas de guarda se cumplen. En efecto, tu misión aquí es aplanar la estructura.
##How to Refactor
Intenta librar al código de efectos secundarios; Separar consulta de modificador puede resultar útil para ese fin. Esta solución será necesaria para la reorganización que se describe a continuación.
-
Aísla todas las cláusulas de guarda que conducen a lanzar una excepción o a devolver de inmediato un valor desde el método. Coloca estas condiciones al principio del método.
-
Una vez completada la reorganización y superadas con éxito todas las pruebas, comprueba si puedes usar Consolidar expresión condicional para las cláusulas de guarda que conducen a las mismas excepciones o valores devueltos.