Clean Code en C++: principios y ejemplos en la práctica

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Clean Code en C++: principios y ejemplos en la práctica



Cada desarrollador de C++ tarde o temprano se enfrenta al problema de mantener su propio código o el de otros. Plantillas complejas, funciones sobrecargadas y macros interminables convierten el proyecto en una pesadilla. El concepto de Clean Code (código limpio), popularizado por Robert Martin, ofrece reglas simples pero efectivas que hacen que el código sea comprensible, seguro y fácil de modificar. En este artículo, analizaremos los principios clave de Clean Code aplicados a C++ y mostraremos cómo aplicarlos en la práctica.



1. Nombres de variables y funciones: diga lo que hace



La primera regla del código limpio es que el nombre debe revelar la intención del desarrollador. En C++, esto es especialmente importante debido a la abundancia de punteros, referencias y sobrecargas.



Ejemplo malo:

int d; // elapsed time in daysvoid f(int* a, int n); // ???


Ejemplo bueno:

int daysSinceLastLogin;void processUserData(const std::vector<int>& userIds);


Use palabras completas, evite variables de una sola letra (excepto para índices en bucles cortos). Para variables booleanas, use los prefijos is, has, should:

bool isValidInput;bool hasPermissions;


Nombre las clases y estructuras con sustantivos, y las funciones con verbos o frases verbales: class UserAccount, void calculateSalary().



2. Funciones: pequeñas, con una sola responsabilidad



Una función debe hacer solo una cosa y hacerla bien. La longitud máxima es de 20-30 líneas. Si la función ocupa más, divídala en funciones auxiliares.



Ejemplo malo (función monolítica):

void processOrder(Order& order) {    // verificación de pago    // actualización de inventario    // envío de email    // registro    // generación de recibo}


Ejemplo bueno (descomposición):

void processOrder(Order& order) {    if (!validatePayment(order)) return;    updateInventory(order);    sendConfirmationEmail(order);    logTransaction(order);    generateReceipt(order);}


Trate de evitar efectos secundarios. La función no debe modificar variables globales o argumentos pasados por referencia sin una indicación explícita en el nombre (resetData, fillBuffer).



3. Gestión de memoria y recursos: RAII y punteros inteligentes



C++ brinda control total sobre la memoria, pero esto conduce a fugas. Clean Code propone usar el modismo RAII (Resource Acquisition Is Initialization) y punteros inteligentes en lugar de new/delete en bruto.



Ejemplo malo (gestión manual):

void process() {    int* data = new int[100];    // ... mucho código ...    if (error) {        delete[] data;        return;    }    delete[] data;}


Ejemplo bueno (RAII):

void process() {    std::unique_ptr<int[]> data = std::make_unique<int[]>(100);    // ... código ...    // delete se llama automáticamente al salir del ámbito}


Para propiedad compartida, use std::shared_ptr; para referencias débiles, use std::weak_ptr. Nunca devuelva punteros en bruto a datos internos: use referencias o punteros inteligentes.



4. Manejo de errores: excepciones y códigos de retorno



El código limpio requiere un manejo de errores explícito y predecible. En C++, hay dos enfoques principales: excepciones y códigos de retorno. Elija un estilo dentro del proyecto.



Ejemplo malo (ignorar errores):

int divide(int a, int b) {    return a / b; // ¡división por cero!}


Ejemplo bueno (excepciones):

int divide(i                

Blogs

Book Recommendations