Clean code: principios, ventajas y ejemplos
El término clean code se atribuye al ingeniero de software Robert Cecil Martin, que lo utilizó en su libro Clean Code: Refactoring, Patterns, Testing and Techniques for Clean Code para referirse al código limpio. Sin embargo, sus principios son mucho más antiguos y no provienen del campo de la programación. Te explicamos en qué consiste el clean code, cuáles son sus ventajas y cómo desarrollarlo.
Clean code: ¿qué es?
El clean code no es un conjunto de reglas estrictas, sino una serie de principios que ayudan a producir código intuitivo y fácil de modificar. En este contexto, intuitivo significa que cualquier desarrollador profesional pueda entenderlo de inmediato. Un código fácilmente adaptable tiene las siguientes características:
- La secuencia de ejecución de todo el programa sigue una lógica y tiene una estructura sencilla.
- La relación entre las diferentes partes del código es claramente visible.
- La tarea o función de cada clase, función, método y variable es comprensible a primera vista.
Un código se considera fácil de modificar cuando es flexible y ampliable, lo que también ayuda a corregir los posibles errores que pueda tener. Por todo ello, el código limpio es muy fácil de mantener y presenta las siguientes propiedades:
- Las clases y los métodos son reducidos y, si es posible, tienen una sola tarea clara.
- Las clases y los métodos son predecibles, funcionan como se espera y son de acceso público a través de API (interfaces) bien documentadas.
- El código ha sido sometido a pruebas unitarias.
Las ventajas de este tipo de programación son obvias: el clean code se vuelve independiente del desarrollador que lo ha creado. En principio, cualquier programador puede trabajar con él, lo que evita problemas como los que conlleva el código heredado. El mantenimiento del software también se simplifica, porque los bugs son más fáciles de buscar y corregir.
Clean code: principios generales
¿Cómo escribir código limpio? Crear clean code implica tener en cuenta ciertos principios fundamentales durante el desarrollo del software. No se trata de seguir unas instrucciones concretas que indican cómo programar en ciertas situaciones, sino más bien de una autorreflexión sobre el propio trabajo. Por este motivo, su significado despierta polémica en la comunidad de desarrolladores: lo que unos consideran “limpio”, puede ser “sucio” para otros, de modo que la limpieza del código acaba siendo algo subjetivo. A continuación, te presentamos algunos principios del código limpio muy extendidos y que casi todos los desarrolladores consideran útiles.
Lo más sencillo posible: KISS
KISS (del inglés keep it simple, stupid o “que sea sencillo, estúpido”) es uno de los principios del código limpio más antiguos, que ya utilizaba el ejército estadounidense en la década de 1960. KISS recuerda a los desarrolladores que el código debe ser lo más sencillo posible, evitando cualquier complejidad innecesaria. En programación, nunca hay una única manera de resolver un problema. Las tareas siempre pueden expresarse en diferentes lenguajes y formularse con distintos comandos. Por lo tanto, los programadores que siguen el principio KISS siempre deben preguntarse si podrían dar con una solución más simple a un problema en particular.
Evitar repetir sin motivo: DRY
DRY (del inglés don’t repeat yourself, o “no te repitas”) es una concreción de KISS. De acuerdo con el principio DRY, cada función debe tener una representación única y, por lo tanto, inequívoca dentro del sistema general del clean code.
Lo contrario de DRY es WET (we enjoy typing o “nos lo pasamos bien tecleando”). El código es WET cuando contiene duplicaciones innecesarias.
Con el siguiente ejemplo, verás más claro el principio DRY del clean code: supongamos que el nombre de usuario y la contraseña aparecen dos veces en el código para utilizarlos en diferentes acciones. En lugar de programarlos por separado, ambos procesos pueden agruparse en una sola función. De esta manera, el código WET (“húmedo”), con sus redundancias, se convertirá en código DRY (“seco”).
Código WET:
//Variante A
let username = getUserName();
let password= getPassword();
let user = { username, password};
client.post(user).then(/*Variante A*/);
//Variante B
let username = getUserName();
let password= getPassword();
let user = { username, password};
client.get(user).then(/*Variante B*/);
Código DRY:
function getUser(){
return {
user:getUserName();
password:getPassword();
}
}
//Variante A
client.post(getUser()).then(/*Variante A*/ );
//Variante B
client.get(getUser()).then(/*Variante B*/);
Eliminar lo innecesario: YAGNI
El principio YAGNI (you aren’t gonna need it o “no lo vas a necesitar”) del clean code se basa en la siguiente idea: un desarrollador solo debe añadir funciones al código cuando sea estrictamente necesario. YAGNI está íntimamente relacionado con los métodos del desarrollo ágil de software. De acuerdo con este principio, en lugar de comenzar a programar partiendo de un concepto general, la arquitectura del software se desarrolla paso a paso para poder reaccionar a cada problema de forma dinámica. En otras palabras, se crea clean code cuando los problemas subyacentes se resuelven de la manera más eficiente posible.
Legible antes que conciso
El código no solo debe funcionar y ser interpretado por la máquina que lo ejecuta, sino que también debe ser comprensible para otros desarrolladores, especialmente si se trabaja en proyectos colaborativos. Por lo tanto, en el ámbito del desarrollo de software, la legibilidad del código siempre es más importante que su concisión: no tiene sentido escribir un código conciso si el resto de desarrolladores no lo entienden. Un buen ejemplo de creación de código legible sería nombrar las variables.
Los nombres de las variables siempre deben ser comprensibles. Por ejemplo, no es posible entender la siguiente variable sin una explicación o más información:
int d;
Sin embargo, con el siguiente nombre, la misma variable se explica por sí sola:
int elapsedTimeinDays;