Pular para o conteúdo
fg
Voltar ao Journal
·

KISS, YAGNI, DRY

Três princípios simples que melhoram qualquer código. E como aplicar eles sem dogmatismo.

Três acrônimos que aparecem em toda entrevista técnica mas pouca gente aplica de verdade. Vou direto ao ponto.

KISS — Keep It Simple, Stupid

Solução mais simples é quase sempre a melhor. Não é sobre ser preguiçoso — é sobre não inventar complexidade onde não precisa.

Exemplo: filtrar números pares de uma lista.

Versão complicada que ninguém merece:

function numerosPares(lista) {
  let resultado = [];
  for (let i = 0; i < lista.length; i++) {
    if (lista[i] % 2 === 0) {
      resultado.push(lista[i]);
    }
  }
  return resultado;
}

Versão KISS:

function numerosPares(lista) {
  return lista.filter(num => num % 2 === 0);
}

Código simples é mais fácil de ler, dar manutenção e debugar. Se você precisa ler um comentário pra entender o que sua própria função faz, tem algo errado.

YAGNI — You Aren’t Gonna Need It

Não escreva código pra um futuro que você não tem certeza que vai chegar. Aquela autenticação biométrica, o suporte a 5 providers de email, o cache distribuído — implementa QUANDO precisar, não ANTES.

function autenticarUsuario(email, senha) {
  if (verificarCredenciais(email, senha)) {
    return "Usuário autenticado";
  }
  return "Falha na autenticação";
}

function verificarCredenciais(email, senha) {
  const usuarios = [
    { email: '[email protected]', senha: '123456' }
  ];
  return usuarios.some(u => u.email === email && u.senha === senha);
}

A feature extra que você planejou hoje provavelmente vai mudar até você precisar de verdade. Código não escrito é código sem bugs.

DRY — Don’t Repeat Yourself

Código duplicado é inimigo da manutenção. Se você copiou e colou a mesma lógica três vezes, já devia ter extraído pra uma função.

function calcularDesconto(preco, percentual) {
  return preco - (preco * (percentual / 100));
}

function descontoClienteRegular(preco) {
  return calcularDesconto(preco, 10);
}

function descontoClientePremium(preco) {
  return calcularDesconto(preco, 20);
}

Mudou a regra de desconto? Altera num lugar só.

Mas cuidado: DRY levado ao extremo vira acoplamento desnecessário. Se duas funções têm código parecido mas conceitos diferentes, deixar elas separadas é melhor que criar uma abstração forçada.

No fim

KISS, YAGNI e DRY são ferramentas, não mandamentos. Use o bom senso: simplicidade sempre que possível, abstraia quando a duplicação doer, e não implemente o que você não precisa hoje.