DEV Community

Pedro Augusto
Pedro Augusto

Posted on

Programação Funcional com JavaScript

> 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

} 
Enter fullscreen mode Exit fullscreen mode

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])
}

Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

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.

Top comments (0)