¿Hay casos en que un código más detallado (como en las declaraciones más lógicas) es más limpio que un código más conciso?
refactoring
Nombre de usuario incorrecto
fuente
fuente
Respuestas:
Para responder eso, tomemos un ejemplo del mundo real que me sucedió. En C # una biblioteca que mantengo, tenía el siguiente código:
Al discutir esto con sus compañeros, el veredicto unánime fue que las expresiones ternarias anidadas, junto con el uso "inteligente" de
is var
resultaron en código conciso, pero difícil de leer.Entonces lo refactoricé para:
La versión original contenía solo una expresión compuesta con una implícita
return
. La nueva versión ahora contiene una declaración de variable explícita, unaif
declaración y dos explícitosreturns
. Contiene más declaraciones y más líneas de código. Sin embargo, todos los que consulté consideraron que era más fácil leer y razonar, que son aspectos clave del "código limpio".Entonces, la respuesta a su pregunta es un "sí" enfático, más detallado puede ser más limpio que el código conciso y, por lo tanto, es una refactorización válida.
fuente
!
de la condición. También sugeriría poner el segundo retorno en unelse
. Pero incluso como está, es una mejora masiva.if (!foo.HasValue)
es un idioma en su código, aún más fuerte. Sin embargo, en realidadif
no es una salida temprana: es un "hacer esto o aquello dependiendo".1. Falta de correlación entre LOC y la calidad del código.
El objetivo de la refactorización es mejorar la calidad de un código.
LOC es una métrica muy básica que, a veces, se correlaciona con la calidad de un código: por ejemplo, es probable que un método con unos pocos miles de LOC tenga problemas de calidad. Cabe señalar, sin embargo, que LOC no es el único métrica, y en muchos casos carece de la correlación con la calidad. Por ejemplo, un método 4 LOC no es necesariamente más legible o más fácil de mantener que un método 6 LOC.
2. Algunas técnicas de refactorización consisten en agregar LOC.
Si toma una lista de técnicas de refactorización , puede detectar fácilmente las que consisten en agregar LOCs intencionalmente . Ejemplos:
Ambas son técnicas de refactorización muy útiles, y su efecto en el LOC es completamente irrelevante cuando se considera si usarlas o no.
Evita usar LOC.
LOC es una métrica peligrosa. Es muy fácil de medir y es muy difícil de interpretar correctamente.
Hasta que se familiarice con las técnicas de medición de la calidad del código, considere evitar medir LOC en primer lugar. La mayoría de las veces, no obtendrá nada relevante, y habrá casos en los que lo engañará para que disminuya la calidad de su código.
fuente
Si desea ver el resultado final de solo minimizar el recuento de bytes o el recuento de LoC de su código fuente, eche un vistazo a los envíos al sitio de Stack Exchange Code Golf .
Si su código fuente se reduce de tal manera, pronto tendrá un desastre imposible de mantener. Incluso si usted es la persona que escribió dicho código y lo entiende completamente en ese momento, ¿qué tan eficiente será cuando regrese a él dentro de seis meses? Tampoco hay evidencia de que ese código mínimo realmente se ejecute más rápido.
El código debe estar escrito de tal manera que cualquier miembro de su equipo pueda verlo y comprender lo que está haciendo de inmediato.
fuente
Sí, la refactorización definitivamente puede generar más líneas de código.
El caso más común de IMO es cuando tomas código que no es genérico y lo haces más genérico / flexible . El código genérico hace que las líneas de código aumenten significativamente (a veces por un factor de dos o más).
Si espera que el código genérico nuevo sea utilizado por otros (en lugar de solo como un componente interno de software) como una biblioteca, generalmente terminará agregando código de prueba de unidad y marcado de documentación en código que aumentará las líneas de código nuevamente.
Por ejemplo, aquí hay un escenario muy común que ocurre para cada desarrollador de software:
Algunos ejemplos concretos que me vienen a la cabeza:
fuente