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

\n

El code review es una de las herramientas más poderosas para mejorar la calidad del código. Para los desarrolladores principiantes de C#, a menudo parece estresante: da miedo que critiquen tu código, o no está claro qué buscar exactamente en el código de otros. En realidad, un buen code review es un diálogo, no un examen. En este artículo, analizaremos en qué fijarse al revisar código C# (especialmente en el ecosistema .NET) y cómo formular observaciones para que ayuden, no ofendan.

\n\n

1. Qué revisar en código C#: lista de verificación para el revisor

\n

Cuando abres un pull request (PR) de un colega, los ojos se te van a todas partes. Para no ahogarte en los detalles, utiliza un enfoque sistemático. Estas son las áreas clave que debes revisar en cualquier proyecto C#.

\n\n

1.1. Arquitectura y legibilidad

\n

Primero, evalúa el panorama general. Responde estas preguntas:

\n
    \n
  • ¿Este código resuelve la tarea planteada?
  • \n
  • ¿No duplica la lógica existente (principio DRY)?
  • \n
  • ¿Son claros los nombres de clases, métodos y variables?
  • \n
\n

Mal:

\n
public void DoStuff(int a, int b)\n{\n    var x = a + b;\n    // ... otras 50 líneas\n}
\n

Bien:

\n
public int CalculateTotalPrice(int basePrice, int taxAmount)\n{\n    return basePrice + taxAmount;\n}
\n

El nombre del método y los parámetros indican inmediatamente su propósito. Esto reduce la carga cognitiva del lector.

\n\n

1.2. Manejo de errores y seguridad contra null

\n

C# es un lenguaje con un sistema de tipos avanzado, pero NullReferenceException es un problema común. Verifica:

\n
    \n
  • ¿Se utilizan comprobaciones de null (?. , ??, ??=)?
  • \n
  • ¿Hay manejo de excepciones (try-catch) donde sea necesario?
  • \n
  • ¿No se están tragando las excepciones en un catch vacío?
  • \n
\n

Ejemplo de código peligroso:

\n
var user = GetUserById(id);\nConsole.WriteLine(user.Name); // Error si user == null
\n

Versión segura:

\n
var user = GetUserById(id);\nConsole.WriteLine(user?.Name ?? "Invitado");
\n\n

1.3. Rendimiento y LINQ

\n

LINQ es conveniente, pero puede ser ineficiente. Verifica:

\n
    \n
  • ¿No se está recorriendo la colección varias veces (por ejemplo, .Where().Select().ToList() en IQueryable)?
  • \n
  • ¿Se usa Any() en lugar de Count() > 0 para verificar si hay elementos?
  • \n
  • ¿No hay materializaciones innecesarias (.ToList(), .ToArray()) en medio de la cadena?
  • \n
\n

Mal:

\n
var list = items.Where(x => x.IsActive).ToList();\nvar first = list.FirstOrDefault();
\n

Mejor:

\n
var first = items.FirstOrDefault(x => x.IsActive);
\n\n

1.4. Asincronía y Task

\n

En .NET, la asincronía es el estándar. Revisa:

\n
    \n
  • ¿Se olvidó el await antes de una llamada asíncrona?
  • \n
  • ¿Hay llamadas bloqueantes (.Result, .Wait()) en un contexto síncrono?
  • \n
  • ¿Se cumple la convención: los métodos asíncronos terminan en Async?
  • \n
\n

Antipatrón:

\n
var data = GetDataAsync().Result; // Puede causar deadlock
\n

Correcto:

\n
var data = await GetDataAsync();
\n\n

2. Cómo dar retroalimentación: con suavidad pero de forma constructiva

\n

Incluso la lista de verificación perfecta es inútil si tus comentarios suenan a crítica. Aquí tienes algunas reglas que ayudarán a que el code review sea útil para todos.

\n\n

2.1. Usa mensajes en primera persona y preguntas

\n

En lugar de "Escribiste mal código", di "Me parece que este método se puede simplificar. ¿Qué opinas?".

\n

Ejemplos de formulaciones:

\n
    \n
  • "No estoy seguro de entender esta lógica. ¿Podrías explicarla?"

Blogs

Book Recommendations