Principios de Clean Code
Clean Code no es un fin en sí mismo, sino el fundamento para software que pueda mantenerse y extenderse durante años. Este artículo cubre los principios más importantes con ejemplos prácticos.
Este artículo complementa clean-code-solid-prinzipien.mdx.
En pocas palabras
Clean Code significa escribir código de manera que otros desarrolladores lo entiendan, modifiquen y extiendan rápidamente. Principios clave: nombres significativos, funciones pequeñas, DRY, KISS, YAGNI.
Descripción técnica compacta
Clean Code es un enfoque para el desarrollo de software que prioriza la legibilidad, el mantenimiento y la extensibilidad. Popularizado por Robert C. Martin, Clean Code abarca principios como nombres expresivos, funciones cortas con una única responsabilidad, evitar duplicación, simplicidad y refactorización consistente.
Los principios más importantes
1. Nombres significativos
// Malo
const d = 2;
const arr = getUsers();
// Bien
const DAYS_IN_WEEK = 7;
const activeUsers = users.filter(u => u.isActive);
2. Funciones pequeñas
Las funciones deben ser pequeñas y hacer exactamente una cosa.
// Malo: hace demasiado
function processUser(user) {
user.email = user.email.toLowerCase();
user.name = user.name.trim();
saveToDatabase(user);
sendWelcomeEmail(user);
}
// Bien: dividido en responsabilidades
function normalizeUser(user) {
return { ...user, email: user.email.toLowerCase(), name: user.name.trim() };
}
async function registerUser(user) {
const normalized = normalizeUser(user);
await saveToDatabase(normalized);
await sendWelcomeEmail(normalized);
}
3. DRY (Don’t Repeat Yourself)
// Malo: IVA duplicado
function calculateTotal(items) {
return items.reduce((s, i) => s + i.price * i.qty * 1.19, 0);
}
// Bien: constante centralizada
const VAT_RATE = 1.19;
function calculateTotal(items) {
return items.reduce((s, i) => s + i.price * i.qty * VAT_RATE, 0);
}
4. KISS (Keep It Simple)
// Malo: abstracción excesiva
class UserProcessor {
constructor(strategy) { this.strategy = strategy; }
process(user) { return this.strategy.execute(user); }
}
// Bien: simple
function normalizeEmail(user) {
return { ...user, email: user.email.toLowerCase() };
}
5. YAGNI (You Aren’t Gonna Need It)
Implementa solo lo que necesitas ahora.
Principios adicionales
Boy Scout Rule
Deja el código más limpio de lo que lo encontraste.
Command-Query Separation
Una función debe hacer algo (Command) o devolver algo (Query), no ambas cosas.
Manejo de errores
// Malo: errores silenciados
function getData() {
try { return fetchFromAPI(); }
catch (e) { return null; }
}
// Bien: errores registrados y relanzados
async function getData() {
try { return await fetchFromAPI(); }
catch (error) {
logger.error('API fetch failed', error);
throw new Error('No pudieron cargarse los datos');
}
}
Clean Code - Refactoring, Patterns, Testen und Techniken für sauberen Code: Deutsche Ausgabe
39,99 €
Bei Amazon ansehenAffiliate-Link: Bei einem Kauf erhalten wir möglicherweise eine Provision.
Clean Code für Dummies: Besser programmieren. Professionelle Softwareentwicklung.
24,99 €
Bei Amazon ansehenAffiliate-Link: Bei einem Kauf erhalten wir möglicherweise eine Provision.
Besser coden: Best Practices für Clean Code. Das ideale Buch für die professionelle Softwareentwicklung
34,99 €
Bei Amazon ansehenAffiliate-Link: Bei einem Kauf erhalten wir möglicherweise eine Provision.
Code Smells
| Problema | Descripción | Solución |
|---|---|---|
| Long Method | Función > 30 líneas | Dividir |
| Large Class | Clase > 200 líneas | Separar responsabilidades |
| Duplicate Code | Lógica idéntica en varios lugares | Extraer |
| Long Parameter List | > 4 parámetros | Objeto parámetro |
| Deep Nesting | > 3 niveles de anidación | Early Return / Guard Clauses |
| Dead Code | Código nunca ejecutado | Eliminar |
| Magic Numbers | Constantes sin nombre | Constantes nombradas |
Ejemplo práctico: Refactoring
// Antes: ilegible, hace demasiado
function calc(o, c, d) {
let r = 0;
for (let i = 0; i < o.length; i++) {
if (o[i].t == 'premium') r += o[i].p * 0.8;
else if (o[i].t == 'vip') r += o[i].p * 0.7;
else r += o[i].p;
}
if (d) r = r * 0.9;
return r * 1.19;
}
// Después: Clean Code
const VAT_RATE = 1.19;
const DISCOUNT_MAP = { premium: 0.8, vip: 0.7, standard: 1.0 };
function applyDiscount(price, customerType) {
const factor = DISCOUNT_MAP[customerType] ?? 1.0;
return price * factor;
}
function calculateOrderTotal(orders, hasCoupon = false) {
const subtotal = orders.reduce(
(sum, order) => sum + applyDiscount(order.price, order.type), 0
);
const afterCoupon = hasCoupon ? subtotal * 0.9 : subtotal;
return afterCoupon * VAT_RATE;
}
Puntos clave para el examen
- DRY, KISS, YAGNI como principios fundamentales
- Nombres significativos como documentación más importante
- Funciones: una responsabilidad, máximo 20-30 líneas
- Boy Scout Rule: dejar el código más limpio
- Command-Query Separation
- Identificar y resolver Code Smells
- Refactoring como proceso continuo
FAQ
1. ¿Qué significa DRY?
2. ¿Qué significa KISS?
3. ¿Qué significa YAGNI?
4. ¿Cuán larga debe ser una función?
5. ¿Cuál es la Boy Scout Rule?
6. ¿Qué es Command-Query Separation?
7. ¿Qué son Magic Numbers?
8. ¿Qué es un Code Smell?
9. ¿Quién popularizó Clean Code?
10. ¿Qué es Deep Nesting?
11. ¿Debo usar comentarios?
12. ¿Qué es Dead Code?
13. ¿Qué es Long Parameter List?
14. ¿Qué es Refactoring?
15. ¿Por qué es importante Clean Code?
Si aún tienes preguntas, consulta clean-code-solid-prinzipien.mdx.
Continuando en la ruta de aprendizaje de Calidad de Software
El siguiente artículo en la ruta de Calidad de Software aborda Fundamentos de los Principios SOLID - los cinco principios del diseño orientado a objetos: SRP, OCP, LSP, ISP y DIP.
Referencias
- https://www.oreilly.com/library/view/clean-code/9780134661742/
- https://clean-code-developer.com/
- https://refactoring.com/
Recomendaciones de libros sobre Calidad de Software
Si deseas profundizar en Clean Code, Calidad de Software y Refactoring, te recomendamos los siguientes libros:
Keine Bücher für Kategorie "software-engineering" gefunden.






