JavaScript: o que os seniors procuram no código e pelo que dão nota negativa

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Revisão de código em JavaScript: o que realmente irrita os seniors

\n\n

Todo desenvolvedor já recebeu pelo menos um pull request com um comentário como "é melhor reescrever isso aqui" ou "isso é um antipadrão". Se você é Júnior ou Pleno, essas observações muitas vezes parecem picuinhas. Mas por trás de cada palavra de um sênior há experiência real: um problema em produção, um bug às três da manhã ou uma queda de desempenho.

\n\n

Reunimos as observações mais comuns que os seniors deixam nas revisões de código em JavaScript. Não é apenas uma lista de "isso é ruim, isso é bom". É uma análise do porquê uma abordagem específica é considerada ruim e com o que pode ser substituída.

\n\n

O artigo será útil para todos que escrevem em JS: desde iniciantes até desenvolvedores experientes que desejam melhorar a qualidade do código.

\n\n

1. Mutação de dados de entrada: o pecado capital

\n\n

Um dos erros mais comuns em revisões é modificar objetos ou arrays passados para uma função. Os seniors odeiam isso porque a mutação quebra a imutabilidade e leva a bugs difíceis de rastrear.

\n\n

Exemplo ruim

\n
function addUser(users, newUser) {\n  users.push(newUser); // mutação do array original!\n  return users;\n}\n\nconst allUsers = [{ id: 1 }, { id: 2 }];\nconst updated = addUser(allUsers, { id: 3 });\nconsole.log(allUsers.length); // 3 — o array original foi alterado!
\n\n

Como fazer

\n
function addUser(users, newUser) {\n  return [...users, newUser]; // retorna um novo array\n}\n\nconst allUsers = [{ id: 1 }, { id: 2 }];\nconst updated = addUser(allUsers, { id: 3 });\nconsole.log(allUsers.length); // 2 — o original não foi tocado
\n\n

Por que isso é importante: quando você muta os dados de entrada, qualquer outro código que referencie o mesmo objeto sofre alterações inesperadas. Este é um caminho direto para bugs em operações assíncronas, stores do Redux e estados do React.

\n\n

2. Números e strings mágicas: assassinos da legibilidade

\n\n

Os seniors frequentemente escrevem nos comentários: "Que número é 86400?" ou "De onde veio essa string?". Valores mágicos tornam o código incompreensível e dificultam sua manutenção.

\n\n

Exemplo ruim

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

Como fazer

\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

Dica: coloque todas as constantes em variáveis nomeadas ou em um arquivo de configuração separado. Isso simplifica a revisão de código em JavaScript e o torna autodocumentado.

\n\n

3. Erros com async/await e promises

\n\n

Código assíncrono é uma área onde até mesmo plenos tropeçam. Os seniors nas revisões prestam atenção a dois pontos principais: tratamento incorreto de erros e mistura de sintaxes.

\n\n

Exemplo ruim (promise sem catch)

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

Como fazer

\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('Erro ao carregar dados:', error);\n    throw error; // repassa adiante, se necessário\n  }\n}
\n\n

Importante: nunca ignore erros. Um catch vazio é um mal. Se um erro ocorrer, você deve pelo menos registrá-lo, e melhor ainda, tratá-lo corretamente.

\n\n

Outro erro comum — esquecer o await

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

Blogs

Book Recommendations