Anderson Espindola
24/1/2022 Anderson Espindola

Dry de forma rápida

blog-feature-image

Opa, fala jovens, tudo certo com vocês? ✌

Continuando nossa saga sobre boas práticas no desenvolvimento, estou trazendo à vocês esse último conceito, que é o DRY.

📑 DRY (Don’t repeat yourself)


O DRY tem como objetivo evitar a repetição de código. Simples não?? hahaha 😜

Quem acompanhou os últimos posts sobre KISS e YAGNI já entendeu que a simplicidade é algo muito importante para o desenvolvimento. Partindo desse mesmo princípio, essa filosofia propõe escrevermos cada funcionalidade do código uma única vez, assim, temos um código mais simples.


Se você é desenvolvedor, provavelmente já teve que abrir diversos arquivos e alterar várias funções que no final consertava um único detalhezinho, pois é meu amigo (você não está sozinho nessa 😅), e esse é o grande problema por trás da repetição. Códigos que não são refatorados normalmente sofrem desse problema.

Exemplo 1

Neste exemplo vocês vão entender o quão benéfico é o uso do DRY

  • Imagine que estamos recebendo as informações de uma pessoa, no nosso caso o nome e a idade. Para cada lugar que utilizamos essa pessoa, temos que declarar os tipos dela, no nosso caso teríamos que declarar seu nome e idade.
const apresentarPessoa = (nome: string, idade: number) => {
  listarNome(nome)
  ...
}

Essa situação poderia se repetir e utilizarmos essa informação em dezenas de lugares, agora imagina se precisamos adicionar o CPF da pessoa. Seria uma tragédia não?!? Cada lugar que se refere a uma pessoa teremos que passar adicionando essa informação do CPF. 🤯

Agora se utilizarmos o conceito do DRY, podemos criar um tipo chamado Pessoa.

export type Pessoa = {
  nome: string,
  idade: number,
  cpf: string
}

const apresentarPessoa = (pessoa: Pessoa) => {
  listarNome(pessoa.nome)
  ...
}

Fazendo dessa forma todos os lugares utilizam esse tipo, já recebem o novo atributo que adicionamos no nosso tipo, e não precisamos ficar passando de arquivo em arquivo adicionando esse novo atributo.

Exemplo 2

Agora vamos fazer uma função de validação que retorna um erro caso não exista algum atributo obrigatório.

const validarPessoa = (pessoa: Pessoa) => {
  if (!pessoa.nome) {
    throw new Error('Nome é obrigatório')
  }

  if (!pessoa.idade) {
    throw new Error('Idade é obrigatório')
  }

  if (!pessoa.cpf) {
    throw new Error('CPF é obrigatório')
  }

  return pessoa
}

Observando o código acima, percebemos que a ação tomada caso exista um parâmetro obrigatório é a de retornar o mesmo erro. Podemos então realizar uma função utilizando o conceito do DRY, reduzindo assim, o número de linhas de código.

const validarPessoa = (pessoa: Pessoa) => {
  const obrigatorios = ['nome', 'idade', 'cpf']

  obrigatorios.forEach(atributo => {
    if (!pessoa[atributo]) {
      throw new Error(`${atributo} é obrigatório`)
    }
  })

  return pessoa
}

Legal né? Nesse exemplo já conseguimos reduzir o número de linhas de código, imagine isso em grande escala. 🤯

📖 Conclusão


Finalizando esse último post sobre boas práticas de maneira rápida, espero que você consiga aplicar essas filosofias no seu dia a dia, seja desenvolvendo ou olhando aquele PRzão (Pull Request) do seu colega de trabalho, assim você pode repassar para ele essas boas práticas.

Então é isso jovens, espero que tenham curtido essa saga. Um abraço!! 🖖


🔗 Referências


“Inspecionar para prevenir defeitos é bom. Inspecionar para encontrar defeitos é desperdício.” 🧙‍♂️

Anderson Espindola.

comments powered by Disqus

NOS ACOMPANHE NAS REDES SOCIAIS