Pregunta

  

Posible duplicado:
   ¿Cuándo es una función demasiado larga?

Recientemente se me ha encomendado la tarea poco envidiable de revisar el código deficiente escrito por otro desarrollador y documentar las malas prácticas. (¡Todo esto con el propósito de evitar pagar por el trabajo del desarrollador en lugar de cualquier razón altruista, por supuesto!)

El código revisado tiene varios procedimientos que son muchas líneas de código: el más largo es de casi 600 líneas. Un par de problemas con esto que he pensado son la capacidad de mantenimiento y la legibilidad.

El truco es que necesito justificar ante un laico por qué es una mala práctica y, si es posible, respaldarlo con un libro de referencia bien considerado y actual. Las analogías también son buenas.

¿Alguna idea?

Duplicar: ¿Cuándo es una función demasiado larga?
Duplicar: ¿La mejor regla para el tamaño máximo de la función?

¿Fue útil?

Solución

No se trata de líneas de código. Como Steve Mcconnell y Bob Martin dice (dos referencias bastante buenas sobre las mejores prácticas de codificación), un método debe hacer una cosa y solo una cosa. Sin embargo, muchas líneas de código que se necesitan para hacer eso son las líneas que debería tener. Si eso "una cosa" puede dividirse en cosas más pequeñas, cada una de ellas debe tener un método.

Buenas pistas de que su método está haciendo más de una cosa:

  • Más de un nivel de sangría en un método (indica demasiadas ramas lógicas para hacer solo una cosa)
  • " Saltos de párrafo " - los espacios en blanco entre los grupos lógicos de código indican que el método está haciendo más de una cosa

Solo por nombrar algunos. Bob Martin también dice que mantenga alrededor de 10. Personalmente, generalmente trato de disparar para 10. Si comienza a acercarse a 20, es una señal mental para prestar más atención a ese método. Pero en última instancia, LoC es una mala métrica para casi cualquier cosa. Es solo un indicador útil que puede señalar el problema real.

Otros consejos

La verdadera respuesta

No hay un número específico.

Una respuesta concreta

Si tiene que justificar con algún número a abogados o algo así, calcule el número máximo de líneas que caben en una ventana típica de editor de desarrollo en su tienda, y úsela.

Práctica general

Ni siquiera debería mirarlo de esa manera, pero no debería haber nada muy complejo en una sola función.

Cada unidad de trabajo debe delegarse en su propio método comprobable descriptivo de unidad. Haga esto y todos sus métodos terminan siendo pequeños y legibles sin contar nunca las líneas ......

El mayor infractor que veo es 3-4 + condiciones booleanas explotadas en medio de una declaración if. Envuelva todo eso en un booleano con un buen nombre, luego envuelva las piezas que lo componen que son complejas por sí mismas.

En primer lugar, tenga en cuenta que la restricción de longitud está completamente separada de la métrica habitual, que es "¿la función hace una sola cosa y lo hace bien?" Si la respuesta a esa pregunta no es sí, la función probablemente no sea buena de todos modos, independientemente de la longitud.

Relevante específicamente para la longitud máxima, una cita de Code Complete, generalmente considerado como uno de los mejores libros sobre el tema de las prácticas de codificación:

  

De vez en cuando, un algoritmo complejo conducirá a una rutina más larga, y en esas circunstancias, se debe permitir que la rutina crezca orgánicamente hasta 100-200 líneas. (Una línea es una línea de código fuente sin comentarios ni espacios en blanco). Décadas de evidencia dicen que las rutinas de tal longitud no son más propensas a errores que las rutinas más cortas. Deje que cuestiones como la profundidad de anidamiento, el número de variables y otras consideraciones relacionadas con la complejidad dicten la duración de la rutina en lugar de imponer una restricción de longitud per se.

     

Si desea escribir rutinas de más de 200 líneas, tenga cuidado. Ninguno de los estudios que informaron una disminución en el costo, disminución en las tasas de error, o ambos con rutinas más grandes distinguidas entre tamaños de más de 200 líneas, y seguramente se encontrará con un límite superior de comprensibilidad al pasar 200 líneas de código.

Han pasado muchos años desde que leí esto, pero creo que fue en Learning Perl que recomiendan hacer un procedimiento que ya no se puede ajustar todo en la pantalla a la vez. Pensé que este era un buen criterio. He visto funciones más largas que aún eran legibles debido al código repetitivo (por ejemplo, acceso a la base de datos y asignación de valores de propiedad), pero esas son la excepción y no la norma.

Para agregar al punto de Rex, también debe ser lo más corto posible. Bob Martin dice 10 o menos

Object Mentor - ¿Qué tan grande debe ser una función?

Lo menos posible.

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