Por qué el código limpio en C++ no es pedantería, sino respeto
Si alguna vez has abierto un proyecto escrito "a las apuradas" hace un año y no podías entender qué hace una función llamada doStuff() — sabes de qué hablo. El código limpio en C++ no es solo estética. Es ahorro de tiempo, nervios y dinero. C++ es un lenguaje potente, pero también traicionero: la memoria se gestiona manualmente, las plantillas pueden generar monstruos y la sobrecarga de operadores puede ser magia real. Sin disciplina, el código se convierte rápidamente en "espagueti".
En este artículo, analizaremos cómo escribir código limpio en C++ para que sea fácil de leer, mantener y ampliar. Sin rodeos: solo práctica, ejemplos y principios probados.
Regla n.º 1: La nomenclatura es el 50 % del éxito
Los nombres de variables, funciones y clases deben responder a la pregunta "¿qué es esto?" o "¿qué hace?". Olvídate de int x y void f(). Usa nombres significativos.
Mal ejemplo
int d; // ¿qué es d? ¿distancia? ¿fecha? ¿tonto?void p() { // ¿imprime? ¿analiza? ¿llora? // ...}Buen ejemplo
int distanceInMeters;void printUserProfile() { // ...}Consejo: Mantén un solo estilo. Para C++, el estándar es camelCase para variables y funciones, PascalCase para clases. No mezcles snake_case y camelCase en un mismo proyecto: esto reduce la legibilidad.
Regla n.º 2: Las funciones deben ser pequeñas y hacer una sola cosa
El principio de responsabilidad única (Single Responsibility) no solo funciona para las clases, sino también para las funciones. Una función ideal tiene entre 5 y 20 líneas. Si una función hace más de una cosa, divídela.
Mal
void processData(vector<int>& data) { // ordenamiento sort(data.begin(), data.end()); // filtrado vector<int> filtered; for (int x : data) if (x > 0) filtered.push_back(x); // salida for (int x : filtered) cout << x << " ";}Bien
vector<int> filterPositive(const vector<int>& data) { vector<int> result; for (int x : data) if (x > 0) result.push_back(x); return result;}
void printData(const vector<int>& data) { for (int x : data) cout << x << " ";}
void processData(vector<int>& data) { sort(data.begin(), data.end()); auto filtered = filterPositive(data); printData(filtered);}Ahora cada función se puede reutilizar y probar por separado. El código limpio en C++ es modularidad.
Regla n.º 3: Evita números y cadenas mágicas
Los números y cadenas cuyo valor no se entiende por el contexto son malos. Conviértelos en constantes.
Mal
if (temperature > 100) { cout << "¡Peligro!";}Bien
constexpr int MAX_SAFE_TEMPERATURE = 100;
if (temperature > MAX_SAFE_TEMPERATURE) { cout << "¡Peligro!";}Ahora, si el umbral cambia, lo modificarás en un solo lugar. Y no tendrás que buscar todos los 100 en el código.
Regla n.º 4: Los comentarios no son una excusa para el mal código
El mejor comentario es el que no hace falta, porque el código habla por sí mismo. No escribas "qué hace el código" — eso se ve. Escribe "por qué lo hace".
Mal comentario
// incrementamos i en 1i++;Buen comentario
// Usamos preincremento para tipos POD — más rápido++i;Usa // TODO: para secciones incompletas, pero no abuses. El código ideal no necesita explicaciones.
Regla n.º 5: Usa RAII y punteros inteligentes
C++ es famoso por la gestión manual de memoria, pero en el C++ moderno (C++11 y posteriores) hay herramientas potentes