2009-11-26 13 views
7

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

Mis consejos son los siguientes: 1. Utilice una declaración de interruptor cuando sea adecuado; 2.use instrucción exit() cuando es factible; 3. Use una declaración ternaria cuando sea factible;

¿Hay otras sugerencias que pueden reducir las declaraciones if else, especialmente las declaraciones if-else anidadas?

Respuesta

17

Refacturar su 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.

3

Utilice el operador ternario, refactorice su código, escriba una función o una clase que haga todas las declaraciones if else necesarias.

1

polimorfismo podría deshacerse de unos pocos, así, acabase más difícil de implementar para reducir if/else en PHP, ya que no es un tipo seguro ...

19

Trate de usar "pronto retorno" cuando sea posible con el fin de reducir la profundidad de anidamiento Intenta 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; 
} 

Se podría volver a escribir esto como:

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

+1 ¡Esto es muy importante ya que puede reducir el tamaño de su archivo en varios KB! – Xeoncross

+0

+1 También se aplica para continuar, romper, lanzar.A menudo puede mantener baja la complejidad cíclica de esa manera y así hacer que el código sea más legible. – NikiC

+5

También, personalmente, usaría 'return userIsLoggedIn() && is_array ($ param) && $ param ['count']> 0;' aquí. Es breve y conciso. – NikiC

9

Hay un método académico oficial de refactorizar y simplificar muchas if condiciones, llamados Karnaugh mapeo.

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

Puede obtener más información al respecto en el wiki here.

1

Trabajo en una gran cantidad de código que está lleno de lógica empresarial en constante evolución y necesita ser modificado día por medio. Dos consejos que sin duda me ayudaron a seguir el ritmo de las modificaciones son: evite todas las afirmaciones y vuelva/salga lo antes posible. Nunca entre en anidamiento profundo -> cree subrutas/funciones.

Sustitución de todos los else con negada si las declaraciones que hace el código mucho más fácil de leer de arriba a abajo (la proximidad de la condtion de 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, el retorno/salida tan pronto como sea posible . Mi opinión, por supuesto, pero no veo el sentido de ejecutar ninguna condición/prueba adicional una vez que ya haya determinado el resultado de la subrutina, especialmente cuando le gustaría leer el código de arriba a abajo. Eliminar toda ambigüedad hace las cosas más simples.

Para concluir, me gusta evitar usar else especialmente en largas listas de BL. Regrese tan pronto como sepa el resultado. Si el nivel de anidamiento es mayor que 2, cree subrutas/funciones.

+0

Esto, por supuesto, se podría refactorizar de nuevo como: –

Cuestiones relacionadas