Pregunta

tiene una secuencia de funciones que se ejecutan. Caso A: No dependen el uno del otro. ¿Cuál de estos es mejor?

function main() {
  a();
  b();
  c();
}

o

function main() {
  a();
}

function a() {
  ...
  b();
}

function b() {
  ...
  c();
}

Caso B: Ellos dependen de la finalización con éxito de la anterior

.
function main() {
  if (a())
    if (b())
      c();
}

o

function main() {
  if (!a()) return false;
  if (!b()) return false;
  c();
}

o

function main() {
  a();
}

function a() {
  ... // maybe return false
  b();
}

function b() {
  ... // maybe return false
  c();
}

Mejor, por supuesto, los medios más fáciles de mantener y fácil de seguir.

¿Fue útil?

Solución

Caso A: 1.
Razonamiento: Dado que ninguna de las funciones dependen unos de otros, llamándolos con el fin de espectáculos principales de una secuencia lógica de eventos. Su alternativa en la que ellos llaman el siguiente al final de cada función sólo se ve como código espagueti, y es difícil que alguien la lectura de su programa a seguir.

Caso B: Ninguna de las anteriores.

function main() {
    return a() && b() && c();
}

Razonamiento: Parece que realmente no se preocupan por el valor de retorno, lo que desea es salir temprano si una de las funciones devuelve un valor determinado. Puede devolver el "anded" resultado de todas estas funciones, y si cualquiera de estas declaraciones falsas el código se romperá antes de tiempo. Por lo tanto, si un falso entonces b retornos no será ejecutado. La colocación de todos ellos en una sola línea es fácil de leer y espectáculos concisa que son dependientes entre sí.

Otros consejos

Caso A: primera opción

Si utiliza la segunda opción, que hará mucho más difícil de re-utilizar una porque se tira en B y C de forma automática.

Caso b: Depende - hacer a, b, c y devolver valores booleanos forma natural, o algún otro valor para comprobar? Todavía no tendría una llamada B y B llamada c, porque entonces se introduce una dependencia innecesaria. Si los valores de retorno tienen sentido, me inclino por la opción 2 - menos de anidamiento es una cosa buena

.

En primer lugar, la mejor respuesta dependerá de varios aspectos en el contexto del código está en -. No hay nadie derecho respuesta que 'depende'

Sin embargo, teniendo en su valor nominal, Caso A:

Opción 1 muestra una vista de alto nivel del algoritmo.

Opción 2 cueros esto, se ocultan las llamadas a B & C. Podría ser un buen montón de trabajo para descubrir la C fue llamado. Además, es más difícil de la prueba A y B en forma aislada si entonces la llamada de otros métodos. Principal siempre se puede probar si A, B y C puede ser burlado.

Caso B: Es común tener argumentos sobre que tiene de 1 punto de salida vs múltiples puntos de salida en un método. A veces varios puntos de salida pueden hacer que el código más simple, lo que hace que sea más fácil de mantener, otras veces no es obvio qué impacto tiene un retorno, o de que se produzca un retorno, lo que hace que sea menos fácil de mantener.

Opción 1 muestra el algoritmo de manera explícita, sino múltiple anidada si de puede salir rápidamente de la mano. En este tipo de casos, sin duda tengo la opción 2 o alguna variante booleano inteligente (sí, Corey).

Opción 3 se ve simplemente obtusos a mí.

Caso A: primera opción

Caso B: segunda opción

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