Dry de forma rápida

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
- http://www.macoratti.net/16/04/net_dry1.htm
- https://medium.com/@rafaelsouzaim/n%C3%A3o-se-repita-dry-dont-repeat-yourself-40da33289bcf
- https://www.oreilly.com/library/view/97-things-every/9780596809515/ch30.html
“Inspecionar para prevenir defeitos é bom. Inspecionar para encontrar defeitos é desperdício.” 🧙♂️
comments powered by DisqusAnderson Espindola.