2011-08-03 17 views
9

En el siguiente ejemplo, dado que el valor de retorno no tiene ninguna importancia, ¿hay alguna razón para preferir cualquiera de los dos métodos?if..else vs if() {return}

// Method 1 
function (a, b) { 
    if (a == b){ 
    // I'm just interested in 
    // the stuff happening here 
    } else { 
    // or here 
    } 
return true; 
} 

// Method 2 
function (a, b) { 
    if (a == b){ 
    // I'm just interested in 
    // the stuff happening here 
    return true; 
    } 
    // or here 
    return true; 
} 
+1

Es posible que desee usar '== 'en lugar de' = 'ya que está comparando, no está configurando valores. ;) También un simple 'return a == b;' a veces sería el truco. – Wabbitseason

+0

Solo por curiosidad, ¿por qué escribirías un método que siempre devuelve verdadero o el valor de retorno no tiene importancia? ¿No hay casos extremos? – Kumar

+1

Si el valor de retorno no tiene importancia, ¿por qué se realizan devoluciones explícitas? Simplemente deja que el código "caiga". –

Respuesta

3

Preferiría el Método 1 porque es menos confuso de leer. Además, menos código duplicado.

+0

Es realmente un estilo, uno es más declarativo (si no), el otro es más breve. Prefiero el segundo mejor yo también. – IRegretable

+0

No estoy de acuerdo. Tener múltiples declaraciones de retorno hace que el código sea mucho más difícil de seguir (¡piense en la recursión!) Especialmente cuando se puede evitar. En este caso, siempre volvemos cierto! – adu

+0

Tiene razón, me refería al Método 1 – hspain

0

Recomendaría el método 1 ya que es más legible y auto documentado.

+1

No estoy de acuerdo con que sea más legible. Más anidación generalmente hace que el código sea menos legible y se considera una mala práctica. En consecuencia, dejar de lado la condición de otro es una mejor práctica, creo. – Jeff

+0

Pero si quiere editar en su código, ¿sería capaz de entender la lógica de negocios fácilmente? –

+0

Leer niveles múltiples de si/elses anidados es más difícil de entender la lógica empresarial, en mi humilde opinión. – Jeff

3

Me base mi decisión sobre la claridad del código y la legibilidad, es decir .:

  • elige método 1 cuando se necesita hacer más cosas en el bloque después del bloque si.
  • Elija el método 2 cuando solo necesite dos bloques de código, entonces es más claro leer
  • Elija el método 1 de nuevo en los casos en que piense explícitamente que sus lectores no entenderán su código críptico sin la palabra "else"; esto es común cuando los bloques se vuelven más grandes que unas pocas líneas.

Muchos de los programadores actuales consideran que es menos fácil de leer y estoy de acuerdo. En cuyo caso, la preferencia general debería ir al uso del segundo método.

0

La legibilidad aquí realmente depende del papel de la función.

Si esta función SIEMPRE será verdadera, entonces preferiría el Método 1 Está claro porque solo regresa en un lugar, y es fácil ver que siempre será cierto.

En el caso anterior, el Método 2 es más confuso. Vuelve en múltiples lugares, y es más confuso por lo tanto. Considere la posibilidad de que un desarrollador cruce innecesariamente las posibles ramas y luego vea cómo afectan el valor de retorno. En este caso simple, no es tan importante, pero cuando obtengas condicionales más elaborados, realmente evitaría este enfoque.

Solo usaría el Método 2 si tiene muy poco código en el bloque if. Tal como algo que trataría con una caja de borde.

Espero que ayude.

5

Parece que las mejores prácticas (principalmente por lugares donde he trabajado) es establecer valores predeterminados en la parte superior de un método o función y solo cambiar esos valores si se produce alguna condición. Por lo tanto, no se necesita el uso de else, por lo que se prefiere el Método 2.

Como el ejemplo es JavaScript, se debe prestar especial atención en lo que respecta al tamaño del código. Entonces el Método 2 crearía menos código para la misma funcionalidad, promoviendo su argumento como el preferido.

Sin embargo, si tiene más de 2 condiciones posibles, no se puede evitar un else o si no. Sin embargo, la mayoría de los lugares en los que he trabajado prefieren un Switch Case en estas situaciones.

0

Cualquier intérprete de navegador moderno debería eliminar cualquier ventaja de rendimiento en cualquier dirección.

Hay un par de razones por las que es preferible el método 1 que aún no se ha mencionado. Tener un único punto de salida hace que cualquier modificación futura que requiera una acción común a ambas ramas sea más fácil y menos probable que tenga errores (porque el autor no pudo regresar pronto).De forma similar, en algunos casos hace que la depuración sea más fácil, proporcionando un lugar común para poner un punto de interrupción o alerta().

-4

si el valor de retorno no es de importancia, la primera variante es más fácil de leer para mí, porque no necesito pensar qué es f ** king "true".

si vamos a hablar de return; (¿Es posible en js?) En lugar return true; prefiero primero si las variantes son igualmente, y prefiero segundo en situación como

function doForList($elem){ 
    if($elem.last()) 
     return; //extreme case 
    // A lot of code 

}