Code review en JavaScript: qué revisar y cómo dar retroalimentación

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 JavaScript: qué revisar y cómo dar retroalimentación



Code review (revisión de código) no es solo una verificación formal antes de fusionar un pull request. Es una herramienta poderosa para mejorar la calidad del código, compartir conocimientos en el equipo y prevenir errores en etapas tempranas. En el mundo de JavaScript y Node.js, donde la asincronía y la tipificación dinámica crean muchas trampas ocultas, una revisión competente se vuelve críticamente importante.

En este artículo analizaremos exactamente qué aspectos revisar al hacer code review de código JavaScript y cómo dar retroalimentación para que sea útil, no ofensiva.



1. Lógica, arquitectura y seguridad

Lo primero que hay que verificar es si el código resuelve la tarea planteada. No se sumerja inmediatamente en el formato. Hágase estas preguntas:

  • ¿La lógica funciona correctamente? ¿Hay casos límite (edge cases)? ¿Qué sucede si llega null, undefined o un array vacío?
  • ¿Hay vulnerabilidades? En Node.js esto es especialmente relevante. Verifique si se están pasando datos crudos de la solicitud directamente a una consulta SQL (SQL injection) o a eval(). ¿Se utilizan sanitizadores para HTML?
  • ¿Se respeta la arquitectura? ¿El código viola los principios SOLID? Por ejemplo, ¿una función hace demasiadas cosas? ¿La lógica de negocio está separada de los manejadores de rutas?


// MALO: Mezcla de lógica y capa HTTPapp.get('/user/:id', async (req, res) => {    const user = await db.query(`SELECT * FROM users WHERE id = ${req.params.id}`); // ¡SQL Injection!    res.json(user);});

// BUENO: Separación de responsabilidadesconst getUserById = async (id) => { if (!id || typeof id !== 'string') throw new Error('Invalid ID'); return await db.query('SELECT * FROM users WHERE id = $1', [id]);};app.get('/user/:id', async (req, res) => { const user = await getUserById(req.params.id); res.json(user);});


2. Asincronía y trabajo con promesas

Este es el talón de Aquiles de muchos desarrolladores de JavaScript. Al revisar código Node.js, asegúrese de verificar:

  • Manejo de errores. ¿Todas las funciones asíncronas están envueltas en try/catch? ¿Se olvidó el .catch() en las promesas? ¿Hay promesas "huérfanas" (unhandled promise rejections)?
  • Uso correcto de async/await. ¿Hay un await innecesario donde las promesas podrían ejecutarse en paralelo con Promise.all?
  • Condiciones de carrera (race conditions). ¿Podría el código ejecutarse incorrectamente con solicitudes paralelas al mismo recurso (por ejemplo, un archivo o una variable global)?


// MALO: Ejecución secuencial de consultas independientesconst user = await getUser(id);const posts = await getPosts(id);

// BUENO: Ejecución en paraleloconst [user, posts] = await Promise.all([getUser(id), getPosts(id)]);

// MALO: Manejo de errores olvidadorouter.get('/data', async (req, res) => { const data = await fetchData(); // Si fetchData falla, el servidor también "caerá" res.json(data);});

// BUENOrouter.get('/data', async (req, res, next) => { try { const data = await fetchData(); res.json(data); } catch (error) { next(error); // Pasamos el error al manejador global }});


3. Calidad del código, estilo y nomenclatura

El código debe ser legible, como un buen libro. Incluso si la lógica es correcta, un mal estilo ralentizará el desarrollo en el futuro.

  • Nombres de variables y funciones. Los nombres deben responder a "¿qué es esto?" y "¿qué hace?". Evite variables de una sola letra (excepto contadores de bucles) y abreviaturas como getUsrInf.
  • Números y cadenas mágicas. ¿Se extraen en constantes? const MAX_RETRIES = 3; es mucho más claro que

Blogs

Book Recommendations