Pois é, você já deve ter ouvido falar em ambos os termos, sendo eles: Imperativo x Declarativo. Mas afinal, o que isso impacta no mundo de desenvolvimento? Podemos escrever nossos códigos das duas maneiras, ou seja, nosso código pode ser Imperativo ou Declarativo, e em alguns casos os dois ao mesmo tempo (ambos misturados).
Para que o entendimento fique um pouco mais fácil e simples, vamos trazer o exemplo para o mundo real. Imagine o seguinte cenário:
- Você levará sua compania para um jantar
Chegando no restaurante, o garçom vem até vocês e pergunta:
- Boa noite, em que posso ajudar?
Aqui, você poderia responder de duas maneiras, sendo elas: Imperativa ou Declarativa.
Respondendo de forma Imperativa:
- “Vejo que a mesa próxima a TV está vazia. Minha compania e eu vamos andando ate lá e nos sentaremos”
Respondendo de forma Declarativa:
- “Mesa para dois, por favor”
Veja que ambas as respostas, apesar de terem o mesmo objetivo e finalidade, são bem diferentes umas das outras. Em outras palavras:
- Abordadem Imperativa: você descreverá “como” você faz alguma coisa.
- Abordagem Declarativa: você descreverá “o que” você faz.
De forma simplista e resumida, a diferença seria basicamente essa.
Beleza, já vimos um exemplo do mundo real. Agora, como ele se encaixa em nosso mundo de desenvolvimento? Simples: imagine alguns exemplos: dobrar os valores de um array
ou somar os valores de um array
– ambos também podem ser implementados das duas maneiras.
Dobrando valores de um array
de forma Imperativa:
function double(arr) {
let results = []
for (let i = 0; i < arr.length; i++){
results.push(arr[i] * 2)
}
return results
}
Somando os valores de um array
de forma Imperativa:
function sum(arr) {
let result = 0
for (let i = 0; i < arr.length; i++){
result += arr[i]
}
return result
}
Agora podemos fazer os mesmos exemplos de forma Declarativa. Vamos ver como eles ficam?
Dobrando valores de um array
de forma Declarativa:
const double = arr => arr.map((item) => item * 2)
Somando os valores de um array
de forma Declarativa:
const sum = arr => arr.reduce((prev, current) => prev + current, 0)
Veja que fica muito mais direto, objetivo e menos verboso.
Conclusão
Neste artigo resolvi fugir um pouco dos códigos, linguagens, tecnologias e bibliotecas para focar um pouco em teoria e conceitos. Vimos que de forma Imperativa, nossos códigos tendem a serem mais verbosos e tediosos. Porém, com a abordagem Declarativa tudo fica mais objetivo e menor.
E ai, você já conhecia esses conceitos? Não deixe de comentar!
Até a próxima.