Pregunta

Descubrí que hay muchas instrucciones if-else, especialmente instrucciones if if else anidadas, estas declaraciones hacen que mi código sea menos legible. ¿Cómo reducir el número de sentencias if else en PHP?

Mis consejos son los siguientes: 1.Utilice una declaración de cambio cuando sea adecuado; 2.utilice la declaración exit () cuando sea factible; 3. Use una declaración ternaria cuando sea posible;

¿Hay otros consejos que pueden reducir las declaraciones if else, especialmente las declaraciones if-else anidadas?

¿Fue útil?

Solución

Refactoriza tu código en unidades de trabajo más pequeñas. Demasiada lógica condicional es un olor a código y generalmente indica que su función necesita ser refactorizada.

Otros consejos

Intente utilizar " retorno anticipado " cuando sea posible para reducir la profundidad de anidación. Trate de usar la evaluación de expresiones booleanas.

Ejemplo:

function foo($param)
{
    $ret = false;

    if(userIsLoggedIn()) {
        if(is_array($param)) {
            if($param['count'] > 0) {
                $ret = true;
            }
            else {
                $ret = false;
            }
        }        
    }

    return $ret;
}

Puedes reescribir esto así:

function foo($param) 
{
    if(!userIsLoggedIn()) return false;
    if(!is_array($param)) return false;
    return $param['count'] > 0;
}

Existe un método académico oficial para refactorizar y simplificar muchas condiciones de if , llamadas Karnaugh mapping .

Toma en múltiples condiciones de prueba e intenta ayudar a crear declaraciones if simplificadas que cubran todos los casos requeridos.

Puede obtener más información al respecto en wiki aquí .

Use el operador ternario, refactorice su código, escriba una función o una clase que haga todas las declaraciones necesarias si no.

el polimorfismo también podría eliminar algunos, aunque es más difícil de implementar para reducir si / de lo contrario en PHP, ya que no es de tipo seguro ...

Trabajo en una gran cantidad de código que está lleno de una lógica empresarial en constante evolución y que debe modificarse cada dos días. Dos consejos que ciertamente me ayudaron a mantenerse al día con las modificaciones son: evitar todas las demás declaraciones y devolver / salir lo antes posible. Nunca te metas en la anidación profunda - > crear sub rutinas / funciones.

Reemplazar todas las declaraciones con declaraciones negativas if hace que su código sea mucho más fácil de leer de arriba a abajo (la proximidad de la condición y el bloque de código):

# business logic block
if ( $condition ) {
    # do something
    # code code code
} else {
    # code code code
    return;
}

# refactored:
if ( ! $contition ) {
    # code code code
    return;
}
if ( $condition ) {
    # code code code 
}

En segundo lugar, regrese / salga lo antes posible. Mi opinión, por supuesto, pero no veo el punto de pasar por ninguna condición / prueba adicional cuando una vez que ya ha determinado el resultado de la subrutina, especialmente cuando desea leer el código de arriba a abajo. Eliminar toda ambigüedad simplifica las cosas.

Para concluir, me gusta evitar usar otra cosa, especialmente en listas largas de BL. Regrese tan pronto como sepa el resultado. Si el nivel de anidamiento es más de 2, cree sub rutinas / funciones.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top