Inicio / Desarrollo de Software y Arquitectura / Clean Code: 10 Reglas de Oro para Escribir Código que tu Equipo Amará

Clean Code: 10 Reglas de Oro para Escribir Código que tu Equipo Amará

En la industria del desarrollo de software, existe una gran diferencia entre escribir código que «funciona» y escribir código «limpio». Cuando estás aprendiendo a programar, el único objetivo es que la consola no devuelva un error y que la aplicación haga lo que se supone que debe hacer. Sin embargo, en el mundo profesional, que el código funcione es solo el requisito mínimo.

La realidad del desarrollo de aplicaciones es que el código se lee diez veces más de lo que se escribe. Cada vez que quieres añadir una nueva funcionalidad o arreglar un bug, pasas horas leyendo e intentando comprender el código antiguo. Si ese código es un desastre incomprensible (lo que coloquialmente llamamos «código espagueti»), la productividad del equipo se desploma y la frustración se dispara.

El concepto de Clean Code (Código Limpio), popularizado por el ingeniero Robert C. Martin («Uncle Bob»), no es una serie de reglas estrictas y aburridas, sino una filosofía de empatía hacia tus compañeros de equipo (y hacia tu «yo» del futuro). En esta guía, desglosaremos las 10 reglas de oro para escribir un código profesional, mantenible y escalable.

1. Nombres que revelen la intención (El fin de la ‘x’ y la ‘y’)

Nombrar variables, funciones y clases es una de las tareas más difíciles en programación, pero también la más importante. El nombre de una variable debe responder a tres preguntas: por qué existe, qué hace y cómo se usa.

Si necesitas añadir un comentario para explicar qué es una variable, el nombre es incorrecto.

Código sucio:

Java

int d; // tiempo transcurrido en días
List<int[]> list1 = new ArrayList<int[]>(); // lista de elementos

Clean Code:

Java

int diasTranscurridos;
List<int[]> celdasTableroBuscaminas = new ArrayList<int[]>();

No temas usar nombres largos si aportan claridad. calcularTotalConImpuestos() es infinitamente superior a calcTot().

2. Las funciones deben ser pequeñas (y hacer solo una cosa)

La regla fundamental de las funciones es que deben ser pequeñas. La segunda regla es que deben ser aún más pequeñas. Una función debería tener idealmente menos de 20 líneas de código y debe cumplir con el Principio de Responsabilidad Única (SRP): debe hacer una sola cosa, hacerla bien y no hacer nada más.

Si tienes una función llamada validarUsuarioYGuardarEnBaseDeDatos(), estás haciendo dos cosas distintas. Deberías dividirla en validarUsuario() y guardarUsuario(). Esto hace que el código sea reutilizable y mucho más fácil de testear.

3. Evita los comentarios: El código debe explicarse solo

Existe un mito en la programación que dice que «el buen código está muy comentado». Esto es falso. Los comentarios son, a menudo, un síntoma de código mal escrito.

Los comentarios mienten: el código cambia y se actualiza, pero a menudo los programadores olvidan actualizar el comentario, lo que genera confusión. En lugar de gastar tiempo explicando una lógica compleja en un comentario, extrae esa lógica en una función con un nombre descriptivo.

Excepciones: Los comentarios son útiles para documentar APIs públicas (JavaDoc), explicar expresiones regulares complejas (Regex) o advertir sobre consecuencias críticas (ej. // No cambiar este timeout, el servidor de terceros tarda 10s en responder).

4. El Principio DRY (Don’t Repeat Yourself)

«No te repitas». Si te encuentras copiando y pegando el mismo bloque de código en tres archivos diferentes, estás creando una bomba de relojería. Si el día de mañana descubres un error en esa lógica, tendrás que recordar arreglarlo en tres lugares distintos. Si olvidas uno, tendrás un fallo en producción.

El código duplicado debe ser extraído. Envuelve esa lógica en una función o en una clase, e invócala desde los lugares que la necesiten.

5. Cuidado con los «Números Mágicos» (Magic Numbers)

Un «número mágico» es un valor numérico o cadena de texto (String) incrustado directamente en el código fuente sin ninguna explicación de lo que representa.

Código sucio:

Java

if (usuario.getEdad() > 65) {
    aplicarDescuento(0.15);
}

¿Qué es 65? ¿Qué es 0.15? Para ti hoy tiene sentido, pero en seis meses no lo tendrá.

Clean Code:

Java

final int EDAD_JUBILACION = 65;
final double DESCUENTO_JUBILADO = 0.15;

if (usuario.getEdad() > EDAD_JUBILACION) {
    aplicarDescuento(DESCUENTO_JUBILADO);
}

El uso de constantes globales aporta semántica y facilita la actualización del software (si la edad de jubilación cambia, solo cambias el número en un lugar).

6. Límite de argumentos en las funciones

El número ideal de argumentos (parámetros) para una función es cero (niládica). Seguido de uno (monádica) y dos (diádica). Las funciones con tres parámetros (triádicas) deben evitarse en la medida de lo posible. Más de tres argumentos es una mala práctica.

Cuando una función necesita muchos parámetros, suele ser un indicativo de que esos parámetros pertenecen a un concepto propio.

Código sucio:

Java

public void crearUsuario(String nombre, String apellidos, String email, String password, int edad) { ... }

Clean Code:

Java

// Creamos un objeto Usuario para agrupar los datos
public void crearUsuario(Usuario nuevoUsuario) { ... }

7. Manejo de Errores Elegante (No ocultes la basura)

El manejo de errores no debe oscurecer la lógica de tu programa. En lugar de devolver «códigos de error» (como devolver -1 si un archivo no se encuentra), es preferible lanzar Excepciones (throw new Exception).

Además, nunca dejes un bloque catch vacío. Capturar un error y no hacer nada con él (ni siquiera registrarlo en un log) es la forma más rápida de crear comportamientos fantasmas imposibles de rastrear (debugging) en una aplicación.

8. Formato, Indentación y Consistencia

Leer código debería ser similar a leer un buen artículo de periódico: estructurado, de arriba hacia abajo, con las partes más generales al principio y los detalles técnicos al final.

El formato es crucial. Los niveles de indentación (espacios o tabulaciones) y la colocación de las llaves {} deben ser uniformes en todo el proyecto. Hoy en día, esto es muy fácil de lograr utilizando extensiones de formateo automático en editores como Visual Studio Code (ej. Prettier o configuraciones nativas del lenguaje). Establece un estándar con tu equipo y automatízalo.

9. Código Testeable (Pruebas Unitarias)

El código limpio y las pruebas unitarias van de la mano. Si una función es demasiado larga, está fuertemente acoplada a otras partes del sistema, o hace demasiadas cosas, será casi imposible escribir un test para ella.

Si te cuesta mucho escribir un test para tu código, el problema no está en el framework de testing, está en la arquitectura de tu código. Las pruebas unitarias actúan como una red de seguridad; te permiten refactorizar y limpiar el código viejo con la confianza de saber que no has roto nada.

10. La Regla del Boy Scout (Mejora Continua)

Los Boy Scouts tienen una regla de oro: «Deja el campamento más limpio de como lo encontraste».

En el desarrollo de software, esta regla implica que cada vez que revises un archivo de código (ya sea para añadir una función o corregir un error), debes mejorarlo un poco. Renombra una variable que no era clara, divide una función que era un poco larga, o elimina un comentario inútil. Si todos los miembros de un equipo aplican la regla del Boy Scout, el código se volverá más limpio, robusto y profesional con el paso del tiempo, en lugar de deteriorarse.

Conclusión

El «Clean Code» no es un destino final, es un hábito diario. Nadie escribe código perfecto en el primer borrador. El proceso natural es escribir código sucio para hacer que la aplicación funcione y, acto seguido, refactorizar ese mismo código para hacerlo limpio y legible antes de enviarlo a producción.

La próxima vez que estés programando, piensa en el compañero que tendrá que leer tu código el año que viene (que muy probablemente serás tú mismo). Invertir 10 minutos extra hoy en elegir buenos nombres y separar funciones te ahorrará horas de frustración en el futuro.

Deje un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *