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

} 
```


<p>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. </p>
- **High-Order Functions:**


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

```
{% endraw %}

<p>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.</p>
{% raw %}

```` js
var isDog = function (animal) {
return animal.species === 'dogs'
}

var dogs = animals.filter(isDog)
var otherAnimals = animals.reject(isDog)
```


<p>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 <code>reject</code>  que é o contrário do <code>filter</code>
Comparando isso ao loop <code>for</code> 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 <code>for</code>. Isso significa que podemos escrever códigos com menos bugs em menos tempo.  </p>
Enter fullscreen mode Exit fullscreen mode

Top comments (0)