Programação Funcional com JavaScript
Pedro Augusto
Posted on January 8, 2023
> Esse post é baseado nas minhas anotações do vídeo de introdução a programação funcional com JavaScript do canal Fun Fun Function Clique aqui! para ver.
Por que programar com JavaScript Funcional
Com a programação funcional somos capazes de escrever programas com menos bugs e em menos tempo, por ser um código de fácil interpretação ele produz menos bugs, do mesmo modo, como podemos reaproveitar muito código então gastamos menos tempo. No JavaScript e em outras linguagens de programação, funções são valores como podemos ver a seguir:
- Basic Functions:
var triple = function triple (x) {
return x * 3
}
Assim como strings, funções podem ser atribuidas à variáveis, ou passadas para outras funções, que são conhecidas como High-Order Functions. Mas no que essas funções são boas? Composição o fato de que nós podemos pegar uma função e colocá-la em outra função, nos permite compor várias funções menores em funções maiores.
- High-Order Functions:
var animals = [
{ name: 'Fluffykins', species: 'rabbit' },
{ name: 'Caro', species: 'dog' },
{ name: 'Hamilton', species: 'dog' },
{ name: 'Harold', species: 'fish' },
{ name: 'Ursula', species: 'cat' },
{ name: 'Jimmy', species: 'fish' }
]
// Método filter (High-order Function)
var dogs = animals.filter(function(animal) {
return animal.species == 'dog'
})
// Filter com loop for
var dogs = []
for(var i = 0; i < animals.length; i++) {
if (animals[i].species === 'dog')
dogs.push(animals[i])
}
Podemos ver que com o método filter usamos bem menos código, mas isso não é apenas pela sintaxe visualmente curta, é porque na verdade estamos realmente escrevendo menos código e lógica. A razão pela qual precisamos de menos lógica é porque quando nós escrevemos nosso software em funções pequenas e simples elas podem ser integradas . O que nos permite reutilizar em diversos lugares no nosso código.
var isDog = function (animal) {
return animal.species === 'dogs'
}
var dogs = animals.filter(isDog)
var otherAnimals = animals.reject(isDog)
Como podemos ver, ao separarmos a função de callback, é possível criar um componente reutilizavel em outras high-order functions como no caso do reject
que é o contrário do filter
Comparando isso ao loop for
podemos ver que nós quebramos o problema de forma muito limpa em problemas separados.
Dessa forma somos capazes de pensar, interpretar e corrigir esses problemas separadamente. E isso é muito mais fácil do que quando as soluções estão todas misturadas iguais no loop for
. Isso significa que podemos escrever códigos com menos bugs em menos tempo.
Posted on January 8, 2023
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.