POV: O truque de JavaScript que todo DEV Sênior usa 🤯💻
Uma das maiores diferenças entre um desenvolvedor iniciante e um desenvolvedor experiente não está em decorar mais comandos, mas em escrever códigos mais organizados. Neste artigo, vamos explorar a técnica de Extract Method (Extração de Método), uma das práticas mais poderosas do Clean Code que pode transformar completamente a qualidade do seu código JavaScript.
Extract Method: A técnica que separa desenvolvedores iniciantes de profissionais experientes
Uma das maiores diferenças entre um desenvolvedor iniciante e um desenvolvedor experiente não está em decorar mais comandos, mas em escrever códigos mais organizados. Neste Short mostro uma técnica extremamente utilizada por desenvolvedores experientes: Extract Method (Extração de Método).
POV: O truque de JavaScript que todo DEV Sênior usa 🤯💻
"A diferença entre código que funciona e código que é bem escrito está na capacidade de extrair responsabilidades. Um bom desenvolvedor não escreve código que apenas funciona — ele escreve código que é fácil de entender, testar e manter."
O que é Extract Method?
A técnica de Extract Method (Extração de Método) é uma das refatorações mais fundamentais e poderosas do desenvolvimento de software. Ela consiste em extrair um trecho de código de uma função maior e colocá-lo em uma nova função com um nome descritivo.
O objetivo é simples: transformar funções longas e complexas em funções menores, focadas em uma única responsabilidade. Quando aplicada corretamente, essa técnica torna o código mais legível, testável e fácil de manter.
O problema do código monolítico
Vamos começar com um exemplo clássico de código que funciona, mas que tem problemas de organização:
function calcular(preco, desconto, tipo){
if(tipo.toLowerCase() === "vip"){
return preco - (preco * desconto / 100);
}
if(tipo.toLowerCase() === "normal"){
return preco;
}
}
console.log(100, 50, "vip");
Este código funciona perfeitamente. Mas observe os problemas:
- Responsabilidade única violada: A função faz mais de uma coisa (verifica o tipo E calcula o desconto)
- Duplicação de lógica: O cálculo do desconto está dentro do if, sem possibilidade de reuso
- Dificuldade de teste: Para testar o cálculo do desconto, você precisa testar toda a função
- Baixa legibilidade: A lógica de desconto está escondida dentro do if
Aplicando Extract Method
Agora vamos aplicar a técnica de Extract Method para melhorar este código:
function aplicarPreco(preco, desconto){
return preco - (preco * desconto / 100);
}
function calcular(preco, desconto, tipo){
let l = tipo.toLowerCase();
if(l === "vip"){
return aplicarPreco(preco, desconto);
}
if(tipo.toLowerCase() === "normal"){
return preco;
}
return 0;
}
console.log(100, 50, "vip");
O que mudou:
- Nova função
aplicarPreco: Responsável apenas por aplicar o desconto - Função
calcularmais enxuta: Agora ela se concentra em decidir qual lógica aplicar - Lógica de desconto reutilizável: Podemos usar
aplicarPrecoem outros lugares - Código mais legível: O nome da função explica o que ela faz
✅ Benefício imediato: Agora você pode testar a lógica de desconto separadamente, sem precisar testar toda a lógica de tipos de cliente.
Comparação lado a lado
Veja a diferença visual entre as duas abordagens:
function calcular(preco, desconto, tipo){
if(tipo.toLowerCase() === "vip"){
return preco - (preco * desconto / 100);
}
if(tipo.toLowerCase() === "normal"){
return preco;
}
}
function aplicarPreco(preco, desconto){
return preco - (preco * desconto / 100);
}
function calcular(preco, desconto, tipo){
let l = tipo.toLowerCase();
if(l === "vip"){
return aplicarPreco(preco, desconto);
}
}
Benefícios do Extract Method
📖 Legibilidade
Funções menores com nomes descritivos contam a história do que o código faz. É mais fácil entender o fluxo de uma função quando ela tem poucas linhas.
🧪 Testabilidade
Funções pequenas são mais fáceis de testar. Você pode testar a lógica de desconto isoladamente, sem precisar mockar dependências.
♻️ Reutilização
Código extraído pode ser usado em outros lugares. Se você precisa calcular desconto em outro contexto, basta chamar a função.
🔧 Manutenção
Alterações são isoladas. Se a regra de desconto mudar, você altera apenas um lugar. Menos risco de introduzir bugs.
Exemplos práticos de Extract Method
Exemplo 1: Validação de dados
// ❌ ANTES - Código confuso e difícil de testar
function cadastrarUsuario(dados) {
if (!dados.nome || dados.nome.length < 3) {
throw new Error("Nome inválido");
}
if (!dados.email || !dados.email.includes("@")) {
throw new Error("Email inválido");
}
if (dados.idade < 18) {
throw new Error("Menor de idade");
}
// ... lógica de cadastro
}
// ✅ DEPOIS - Código organizado e testável
function validarNome(nome) {
if (!nome || nome.length < 3) {
throw new Error("Nome inválido");
}
return true;
}
function validarEmail(email) {
if (!email || !email.includes("@")) {
throw new Error("Email inválido");
}
return true;
}
function validarIdade(idade) {
if (idade < 18) {
throw new Error("Menor de idade");
}
return true;
}
function cadastrarUsuario(dados) {
validarNome(dados.nome);
validarEmail(dados.email);
validarIdade(dados.idade);
// ... lógica de cadastro
}
Exemplo 2: Cálculo de frete
// ❌ ANTES - Tudo em uma função
function calcularFrete(pedido) {
let frete = 0;
if (pedido.peso <= 1) {
frete = 10;
} else if (pedido.peso <= 5) {
frete = 20;
} else {
frete = 35;
}
if (pedido.regiao === "Norte" || pedido.regiao === "Nordeste") {
frete += 15;
}
return frete;
}
// ✅ DEPOIS - Responsabilidades separadas
function calcularFretePorPeso(peso) {
if (peso <= 1) return 10;
if (peso <= 5) return 20;
return 35;
}
function calcularFretePorRegiao(regiao) {
const regioesCaras = ["Norte", "Nordeste"];
return regioesCaras.includes(regiao) ? 15 : 0;
}
function calcularFrete(pedido) {
return calcularFretePorPeso(pedido.peso) + calcularFretePorRegiao(pedido.regiao);
}
Clean Code e o Extract Method
O Extract Method é uma das práticas mais recomendadas por Robert C. Martin (Uncle Bob) no livro "Clean Code". Segundo ele, funções devem ser pequenas e fazer apenas uma coisa.
📖 Uncle Bob diz: "O primeiro critério para um bom código é que ele deve ser fácil de entender. Extrair métodos é a ferramenta mais poderosa para alcançar isso."
Os princípios do Clean Code que se aplicam ao Extract Method:
- SRP (Single Responsibility Principle): Cada função deve ter uma única responsabilidade
- DRY (Don't Repeat Yourself): Evite duplicação de lógica
- KISS (Keep It Simple, Stupid): Mantenha as funções simples e focadas
- Nomes Descritivos: O nome da função deve explicar o que ela faz
Quando usar Extract Method?
✅ Quando usar
- Funções com mais de 5-10 linhas
- Lógica duplicada em vários lugares
- Dificuldade em entender o que a função faz
- Função com múltiplas responsabilidades
- Dificuldade em testar partes específicas
❌ Quando evitar
- Funções já pequenas e simples
- Lógica que não será reutilizada
- Extração que cria complexidade desnecessária
- Funções que só serão chamadas em um lugar
Conclusão
A técnica de Extract Method é uma das ferramentas mais poderosas que um desenvolvedor pode ter em seu arsenal. Ela transforma código confuso e difícil de manter em código limpo, organizado e profissional.
Ao aplicar esta técnica você:
- ✅ Torna seu código mais legível para outros desenvolvedores
- ✅ Facilita testes automatizados
- ✅ Permite reutilização de lógica
- ✅ Reduz bugs e facilita manutenção
- ✅ Aplica princípios de Clean Code
💡 Lembre-se: A diferença entre código que funciona e código que é bem escrito está na organização. Extrair métodos é o primeiro passo para escrever código que outros desenvolvedores vão gostar de ler e manter.
🤔 O que você achou?
💬 Quer aprender JavaScript do ZERO? Comece agora a escrever seu primeiro código e seus fundamentos!
❓ FAQ: Perguntas Frequentes sobre Refatoração e Extract Method
🎬 Assista ao Vídeos completo sobre Refatoração
O vídeo foi feito em Javascript mais o conceito pode ser utilizado em qualquer outra linguagem de programação..
🎬 Assista ao Vídeos completo sobre Refatoração
🔗 Conecte-se Comigo
💬 Agora conta aí: você costuma revisar seu código para deixar ele mais limpo ou se funcionou você não mexe mais por medo de quebrar? 👇
#Javascript #Refactoring #CleanCode #Frontend #Programacao #Developer #Dev #WebDevelopment #JavascriptTips #Coding #PHP #Laravel #RogerioPontesTI