Code Review en C++: qué revisar y cómo dar retroalimentación a principiantes

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

Code Review en C++: qué revisar y cómo dar retroalimentación



El code review (revisión de código) es una etapa obligatoria del desarrollo, especialmente en C++. Este lenguaje ofrece una gran libertad, pero con ella viene la responsabilidad. Para los desarrolladores principiantes, el proceso de revisión puede parecer intimidante, pero en realidad es una poderosa herramienta de aprendizaje. En este artículo, analizaremos en qué fijarse al revisar código C++ y cómo dar retroalimentación para que sea útil, no ofensiva.



1. Corrección básica y seguridad de la memoria



Lo primero que hay que verificar en cualquier código C++ es la corrección en el manejo de la memoria. C++ no tiene un recolector de basura, por lo que los errores aquí son críticos.



Qué revisar:

  • Fugas de memoria: Cada new debe tener su correspondiente delete, cada new[] su delete[]. Es mejor usar punteros inteligentes (std::unique_ptr, std::shared_ptr).
  • Desbordamiento de arrays: Usar std::vector::at() en lugar del operador [] para detectar errores.
  • Punteros colgantes: Punteros que referencian memoria ya liberada.
  • Doble liberación: Un delete repetido para un mismo bloque de memoria.


// Malo: gestión manual de memoriaint* arr = new int[100];// ... trabajo ...delete[] arr; // Fácil de olvidar

// Bueno: usamos RAIIstd::vector<int> arr(100);// La memoria se liberará automáticamente


Consejo para el revisor: Si ve punteros crudos (int* ptr) o new/delete manuales, es una bandera roja. Sugiera usar std::unique_ptr o contenedores de la STL.



2. Uso de la biblioteca estándar (STL)



C++20/23 proporcionan una rica biblioteca estándar. Los principiantes a menudo reinventan la rueda donde podrían usar soluciones ya hechas.



Lista de verificación:

  • Contenedores: En lugar de arrays crudos, usar std::vector, std::array, std::map.
  • Algoritmos: En lugar de bucles manuales, usar std::find, std::sort, std::copy.
  • Cadenas: std::string en lugar de char*.
  • Flujos: std::ifstream/std::ofstream en lugar de fopen de C.


// Malo: búsqueda manualbool found = false;for (int i = 0; i < vec.size(); ++i) {    if (vec[i] == target) {        found = true;        break;    }}

// Bueno: algoritmo STLbool found = std::find(vec.begin(), vec.end(), target) != vec.end();


Cómo dar retroalimentación: En lugar de «Esto está mal», diga: «¡Excelente lógica! En la STL hay una función ya hecha std::find que hace lo mismo, pero de forma más corta y segura. ¿Probamos a usarla?».



3. Estilo de código, nomenclatura y constancia



La legibilidad del código es la mitad del éxito. Incluso un código que funciona perfectamente es inútil si no se puede mantener.



En qué fijarse:

  • Nomenclatura: Variables en snake_case (según el estándar C++), clases en PascalCase. Evite nombres de una sola letra (excepto i para contadores).
  • Constancia: Los parámetros que no cambian deben ser const. Los métodos que no modifican el objeto deben ser const.
  • Formato: Un estilo uniforme de sangría (generalmente 4 espacios), espacios alrededor de los operadores.
  • Números mágicos: Extráigalos a constantes (constexpr int MAX_SIZE = 100;).


// Malo: ilegibleint a = 5;for(int i=0;i<10;i                

Blogs

Book Recommendations