Clean Code em JavaScript: princípios e exemplos para iniciantes

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

Clean Code em JavaScript: princípios e exemplos para iniciantes



Código limpo (Clean Code) não é apenas um conceito da moda, mas uma habilidade fundamental de qualquer desenvolvedor profissional. No mundo do JavaScript (especialmente no ambiente Node.js), o código é escrito rapidamente, mas mantê-lo sem princípios claros se torna um verdadeiro pesadelo. Este artigo é para iniciantes que desejam escrever não apenas código funcional, mas bonito, legível e escalável.



Código limpo é aquele que é fácil de ler, fácil de modificar e fácil de testar. Ele não desperta o desejo de reescrevê-lo do zero. Vamos analisar os princípios principais com exemplos práticos.



1. Nomeação de variáveis e funções: diga a verdade



A regra mais simples e ao mesmo tempo mais complexa — o nome deve refletir a essência. Não economize caracteres, economize tempo de compreensão.



Ruim (não claro):

const d = new Date();const arr = ['apple', 'banana', 'grape'];const fn = (x) => x * 2;


Bom (legível):

const currentDate = new Date();const fruitList = ['apple', 'banana', 'grape'];const doubleValue = (value) => value * 2;


Regras de nomeação:

  • Variáveis — substantivos (user, productList, errorMessage).
  • Funções — verbos (getUser, calculateTotal, validateEmail).
  • Valores booleanos — comece com is, has, should (isActive, hasPermission, shouldUpdate).
  • Evite números mágicos — coloque-os em constantes.


// Ruimconst t = 3600000; // Que número é esse?

// Bomconst MILLISECONDS_IN_AN_HOUR = 3600000;const timeout = MILLISECONDS_IN_AN_HOUR;


2. Funções: um passo — uma ação



O princípio da responsabilidade única (Single Responsibility Principle) também se aplica às funções. Uma função deve fazer uma coisa e fazê-la bem.



Ruim (faz tudo de uma vez):

function processUserData(user) {    const fullName = `${user.firstName} ${user.lastName}`;    const email = user.email.toLowerCase();    const isValid = email.includes('@');        if (isValid) {        const result = { fullName, email };        saveToDatabase(result);        sendWelcomeEmail(email);        return result;    } else {        throw new Error('Invalid email');    }}


Bom (dividido em pequenas funções):

function buildFullName(firstName, lastName) {    return `${firstName} ${lastName}`;}

function normalizeEmail(email) { return email.toLowerCase().trim();}

function isValidEmail(email) { return email.includes('@');}

function processUserData(user) { const fullName = buildFullName(user.firstName, user.lastName); const email = normalizeEmail(user.email); if (!isValidEmail(email)) { throw new Error('Invalid email'); } const result = { fullName, email }; saveToDatabase(result); sendWelcomeEmail(email); return result;}


Esse código é fácil de testar, fácil de modificar e fácil de entender.



3. Gerenciamento de complexidade: evite aninhamento profundo



Aninhamento profundo de if e for é inimigo da legibilidade. Use retorno antecipado (early return) e Guard Clauses.



Ruim (inferno profundo):

function processOrder(order) {    if (order) {        if (order.isPaid) {            if (order.items.length > 0) {                // ... 50 linhas de código            }        }    }}


Bom (estrutura plana):

function processOrder(order) {    if (!order) {        return;    }                

Blogs

Book Recommendations