JavaScript : ce que les seniors recherchent dans le code et ce qui leur fait mettre un moins

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Revue de code JavaScript : ce qui agace vraiment les seniors

\n\n

Chaque développeur a déjà reçu une pull request avec un commentaire du genre « il vaut mieux réécrire ça » ou « c'est un antipattern ». Si vous êtes Junior ou Middle, ces remarques semblent souvent être des chicaneries. Mais derrière chaque mot d'un senior se cache une expérience réelle : un incident en production, un bug à trois heures du matin ou une baisse de performance.

\n\n

Nous avons rassemblé les remarques les plus fréquentes que les seniors laissent lors des revues de code JavaScript. Ce n'est pas juste une liste « c'est mauvais, c'est bien ». C'est une analyse pourquoi une approche particulière est considérée comme mauvaise et par quoi on peut la remplacer.

\n\n

Cet article sera utile à tous ceux qui écrivent en JS : des débutants aux développeurs expérimentés qui souhaitent améliorer la qualité de leur code.

\n\n

1. Mutation des données d'entrée : le péché capital

\n\n

Une des erreurs les plus fréquentes en revue — modifier les objets ou tableaux passés à une fonction. Les seniors détestent cela car la mutation brise l'immutabilité et entraîne des bugs difficiles à tracer.

\n\n

Mauvais exemple

\n
function addUser(users, newUser) {\n  users.push(newUser); // mutation du tableau d'origine !\n  return users;\n}\n\nconst allUsers = [{ id: 1 }, { id: 2 }];\nconst updated = addUser(allUsers, { id: 3 });\nconsole.log(allUsers.length); // 3 — le tableau d'origine est modifié !
\n\n

Comment faire

\n
function addUser(users, newUser) {\n  return [...users, newUser]; // on retourne un nouveau tableau\n}\n\nconst allUsers = [{ id: 1 }, { id: 2 }];\nconst updated = addUser(allUsers, { id: 3 });\nconsole.log(allUsers.length); // 2 — l'original n'est pas touché
\n\n

Pourquoi c'est important : lorsque vous mute les données d'entrée, tout autre code qui référence le même objet reçoit des modifications inattendues. C'est un chemin direct vers des bugs dans les opérations asynchrones, les stores Redux et les états React.

\n\n

2. Nombres et chaînes magiques : tueurs de lisibilité

\n\n

Les seniors écrivent souvent dans les commentaires : « C'est quoi ce nombre 86400 ? » ou « D'où vient cette chaîne ? ». Les valeurs magiques rendent le code incompréhensible et compliquent sa maintenance.

\n\n

Mauvais exemple

\n
function calculateDiscount(price) {\n  if (price > 1000) {\n    return price * 0.9;\n  }\n  return price * 0.95;\n}
\n\n

Comment faire

\n
const DISCOUNT_THRESHOLD = 1000;\nconst HIGH_DISCOUNT_RATE = 0.9;\nconst STANDARD_DISCOUNT_RATE = 0.95;\n\nfunction calculateDiscount(price) {\n  if (price > DISCOUNT_THRESHOLD) {\n    return price * HIGH_DISCOUNT_RATE;\n  }\n  return price * STANDARD_DISCOUNT_RATE;\n}
\n\n

Conseil : extrayez toutes les constantes dans des variables nommées ou un fichier de configuration séparé. Cela simplifie la revue de code JavaScript et le rend auto-documenté.

\n\n

3. Erreurs avec async/await et les promesses

\n\n

Le code asynchrone est une zone où même les middles trébuchent. Les seniors en revue prêtent attention à deux points principaux : la mauvaise gestion des erreurs et le mélange des syntaxes.

\n\n

Mauvais exemple (promesse sans catch)

\n
async function loadData() {\n  const response = await fetch('/api/data');\n  const data = await response.json();\n  return data;\n}
\n\n

Comment faire

\n
async function loadData() {\n  try {\n    const response = await fetch('/api/data');\n    if (!response.ok) {\n      throw new Error(`HTTP error! status: ${response.status}`);\n    }\n    const data = await response.json();\n    return data;\n  } catch (error) {\n    console.error('Erreur de chargement des données :', error);\n    throw error; // on propage si nécessaire\n  }\n}
\n\n

Important : n'ignorez jamais les erreurs. Un catch vide est un mal. Si une erreur se produit, vous devez au moins la journaliser, et mieux encore, la gérer correctement.

\n\n

Une autre erreur fréquente — await oublié

\n
function processUsers(users) {\n  users.forEach(async (user) => {\n    await updateUser(user);                

Blogs

Book Recommendations