¿Qué es Clean Code? 🧹
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:
1. Es legible
2. Es fácil de modificar
3. Es fácil de mantener
4. Es fácil de compartir
Reglas generales ⚖️
- Siga las convenciones estándar de cada lenguaje y del equipo.
- Mantenlo simple, estúpido. Más simple siempre es mejor. Reducir la complejidad tanto como sea posible KISS.
- Regla de los boy scouts. Deje el campamento más limpio de lo que lo encontró. Boy scouts rule
- Siempre busca el problema base.
Reglas de diseño 🏗️
- Mantenga los datos configurables en niveles altos.
- Use el polimorfismo en lugar de if/else o switch/case.
- Evite la configuración excesiva.
- Utilice la inyección de dependencia.
- Seguir la Ley de Demeter. Una clase debe conocer solo sus dependencias directas Ley de demeter.
Consejos para el código limpio 🧽
- Sea consistente. Si haces algo de cierta manera, haz todas las cosas similares de la misma manera.
- Utilice variables explicativas.
- Encapsular las condiciones corner cases. Las condiciones de corner cases son difíciles de seguir. Ponga el procesamiento para ellos en un solo lugar.
- Utilice value objects en lugar tipo primitivo Envuelve en tipos primitivos.
- Evite la dependencia lógica. No escriba métodos que funcionen correctamente dependiendo de otra cosa en la misma clase.
- Evita los condicionales negativos.
Reglas de nombres 🤢
- Elija nombres descriptivos e inequívocos.
- Hacer una distinción significativa.
- Use nombres pronunciables.
- Use nombres buscables.
- Reemplace números mágicos con constantes con nombre.
Reglas de funciones 😡
- Pequeñas.
- Haz una cosa.
- Use nombres descriptivos.
- Utilice la menor cantidad posible de argumentos.
- Que no tenga efectos secundarios.
- No use flags arguments. Divida el método en varios métodos independientes que se puedan llamar desde el cliente sin esos flags.
Reglas de comentarios 🤬
- Intenta siempre explicarte en código.
- No sea redundante.
- No agregue ruido obvio.
- No comente el código. Si no se usa, elimínalo.
- Usar como explicación de la intención.
- Utilizar como aclaración de código.
- Usar como advertencia de consecuencias.
Estructura del código fuente 📁
- Separar conceptos verticalmente.
- El código relacionado debe aparecer verticalmente denso.
- Declarar variables cercanas a su uso.
- Las funciones dependientes deben estar cerca.
- Las funciones similares deben estar cerca.
- Coloque las funciones en la dirección hacia abajo.
- Mantenga las líneas cortas.
- Usa espacios en blanco para asociar cosas relacionadas y desasociar las que están débilmente relacionadas.
- No rompa la sangría.
Objetos y estructuras de datos 🧼
- Ocultar estructura interna.
- Use estructuras de datos.
- Evita estructuras híbridas (mitad objeto y mitad datos).
- Debe ser pequeño.
- Que haga solo una cosa Single responsability.
- Pequeño número de variables de instancia Evita más de 2 atributos de instancia.
- La clase base no debe saber nada acerca de sus derivados.
- Use métodos no estáticos a métodos estáticos Evita métidos estáticos.
Pruebas 🧪
- Una aserción por prueba.
- Legible.
- Rápido.
- Independiente.
- Repetible.
Code smells 💩
- Rigidez. El software es difícil de cambiar. Un pequeño cambio provoca una cascada de cambios posteriores.
- Fragilidad. El software se rompe en muchos lugares debido a un solo cambio.
- Inmovilidad. No puede reutilizar partes del código en otros proyectos debido a los riesgos involucrados y al gran esfuerzo.
- Complejidad innecesaria.
- Repetición innecesaria.
- Opacidad. El código es difícil de entender.