it-swarm-es.com

¿Existe un número óptimo de líneas de código por función?

Las funciones no solo se usan para minimizar la duplicación de código, también se usan para dividir una función larga en otras más pequeñas para aumentar la legibilidad, así como para hacer que el código se auto comente. Sin embargo, esta ganancia no es directamente inversamente proporcional al número de LOC por función o método; de lo contrario tendríamos toneladas de funciones, todas las cuales solo contienen una o dos líneas de código.

Esto me lleva a preguntarme: ¿Existe un número óptimo de LOC por función? Si es así, ¿cuál es, y se desvía entre idiomas?

18
gablin

En lugar del número de líneas, el criterio que usaría es que cada función debe hacer solo una cosa y hacerlo bien.

33
grokus

Una vieja regla general es que una función debe ser completamente visible en la pantalla, sin necesidad de desplazarse.

La idea básica es que, si no puede ver toda la función a la vez, la función es demasiado compleja y debe dividirla en partes más básicas.

Si bien esta regla es muy práctica y útil, la regla formal es que debe mantener solo un paso lógico en una función. Una función solo hace un trabajo elemental, si puede dividir el trabajo en más piezas elementales, la función debe dividirse.

21
Wizard79

No hay ninguno.

Las pantallas se hacen más grandes, los tamaños de fuente más pequeños. Las reglas generales no funcionan tan bien cuando las personas tienen pulgares de diferentes tamaños.

Sé conciso. Si su función hace varias cosas, probablemente sea una buena idea dividirla en otras más pequeñas.

15
Josh K

Smalltalk tiene una forma ligeramente inusual de reducir el tamaño de los métodos. Cuando escribe código, lo escribe en un widget llamado Navegador. Un navegador tiene dos partes principales, divididas horizontalmente. Tu código va en la mitad inferior.

Por defecto, un navegador no es muy grande. Puede colocar 5 o 6 líneas antes de que deba comenzar a desplazarse. El desplazamiento, por supuesto, es un poco irritante.

Entonces, en Smalltalk, el entorno "lo alienta" a escribir métodos cortos, de como máximo alrededor de 6 líneas de longitud. (Eso suele ser suficiente; Smalltalk es un lenguaje bastante conciso).

6
Frank Shearar

El número ideal de líneas de código en un método es variable. Básicamente, solo desea escribir el código suficiente para hacer lo que debe hacerse dentro del contexto de la definición de la función. Pienso en esto como una especie de Principio de responsabilidad única , solo aplicado a un método en lugar de una clase.

Cuando un método tiene mucha lógica y varios pasos para completar, entonces tiene sentido dividir el método en varios pasos discretos. Cada uno de estos pasos se extraería en nuevos métodos según sea necesario.

"de lo contrario tendríamos toneladas de funciones, todas las cuales solo contienen una o dos líneas de código"

Cuanto menos haga cada método, más fácil será definirlo y más fácil de entender y administrar. No hay nada de malo en tener cientos de métodos si los necesita. Además, de acuerdo con SRP que mencioné anteriormente, se hace más fácil extraer nuevas clases cuando los métodos se han separado en piezas más pequeñas y manejables.

2
S.Robins

La respuesta es, por supuesto, 42 .

Importante tener en cuenta: Ninguna función puede violar el SRP , o debe enfrentar el inquisición spanisch .

Algunos consejos sobre cómo reducir la cantidad de líneas:

  • ¿Hay comentarios que marcan secciones individuales? Esas secciones deben ser funciones.
  • ¿Hay cadenas if-else o declaraciones de cambio fuera de una fábrica/constructor? Su diseño puede necesitar algunos patrones de diseño mejores para ayudarlo a dividir las responsabilidades.
  • ¿Sus funciones son fáciles de probar? Haga que sus funciones sean fáciles de probar, se desmoronarán.
  • ¿Es complejo y simplemente no hay tierra en profundidad (1000 monstruos de línea)? Haga refactorización de chatarra, es decir, refactorice y no la guarde con la esperanza de recibir información sobre las responsabilidades de los códigos.
1
Johannes

Aquí hay algunas pistas:

  • Si tiene problemas para escribir el comentario explicando el propósito y el uso de la función, es demasiado largo.

  • Si está tentado a escribir un comentario explicando la actividad de una sección de código en la función, entonces la función es demasiado larga.

  • Si está pegando código de otra función, ambos son demasiado largos (extraiga ese código como una función separada).

  • Si necesita una convención de codificación para separar los miembros de datos de clase de las variables locales, entonces la función es demasiado larga y la clase tiene demasiados miembros.

  • Si necesita tomar notas mientras lee una función, es demasiado larga.

Tener 'toneladas' de funciones, cada una de una o dos líneas de largo, no es necesariamente algo malo. Descubrí que esas pequeñas funciones se reutilizaban mucho más de lo que inicialmente esperaba.

0
kevin cline