👑Funcional

Funções

São blocos de códigos nomeados que tem por fim a reutilização de códigos, para utilizar esse bloco basta chamar o nome da função e se necessário passar os devidos parâmetros.
Para declarar uma função basta indicar que a mesma é uma função através da palavra reservada function seguido do seu nome e um par de colchetes para a declaração dos parâmetros a serem recebidos.

    function escreve()
    {
        console.log('Sou uma função que escreve!');
    }
                        

Chamando função.
    escreve();
                        

Com parâmetros

Para referenciar parâmetro basta indicar a posição de memoria através do nome dentro do colchetes, e escrever o bloco de código informando os usos.

    function escreva(entrada1)
    {
        console.log(entrada1);
    }
                            

Uma função tem uma analgia perfeita com uma função matemática ou seja, trabalha os parâmetros e retorna um valor, quando a função devolver uma valor sempre evidencie o mesmo.

    function somar(n1, n2)
    {
        return n1 + n2;
    }
                        

A utilização apenas retorna o valor e não necessariamente o guarda, o mesmo pode ser printado ou armazenado em uma variável.
    let resultado = somar (1, 2);
                        

Funções anônimas 👻

É possível ainda declarar uma função anónima. Caso a mesma não tenha uma variável e estiver fora de um escopo de execução a mesma não terá utilidade, pois estará sem um gatilho para execução.

    function(n1, n2)
    {
        return n1 + n2;
    }
                            

Salvar em uma variável

Para garantir que a função tenha uma execução é possível atribula a uma variável.

    const somar = function(n1, n2)
    {
        return n1 + n2;
    }
                            

Para utilizar :
    console.log(somar(1, 2)); 
                            

Arrow Function 🏹

Disponíveis desde o ES6 de 2015 essas funções anónimas dominam o callback.

Funcionamento: inicialmente omitimos a palavra reservada function restando apenas () para receber os parâmetros, seguido da => que indicará o bloco de código e também eliminamos caso a função tenha apenas uma ação o {}, ainda a mesma sempre retorna valor então o return também se encontra implícito. Explicar trabalho this

Exemplo simples de X + Y

    const somar = (x, y) => x + y;
                        

Execução:
    console.log(somar(1, 2));
                        

Funções de Alta ordem

Funções podem ser passadas como parâmetros para outra funções, deste modo criando um comportamento complexo para a mesma.

    const adicao = (n1, n2) => n1 + n2;

    const calculadora = (n1, n2, operador) => operador(n1, n2);
                        

Execução >>
    console.log(calculadora(1, 2, adicao));
                        

Função Pura 👼🏾

Mesmos argumentos geram os mesmos resultados.

Dado os mesmos argumentos deve ser retornado o mesmo resultado uma vez que o resultado deve depender.

Não deve haver Side Effect

Alterar valores fora do escopo da própria função. Ou seja atentar-se sempre ao return de uma variável diferente da utilizada de fora da função para gerar o resultado desejado.

Imutabilidade

Uma vez criado uma informação a mesma deve ser trabalhada, nunca alterada.

Metodos Funcionais

Array

Cria uma lista a partir de informações de uma lista já existente.

map

Em cada item de uma lista é aplicado uma função. E o map devolvera uma nova lista ao invés de alterar.

Dobrando números ;

let numNormal = [3,6,9]; const dobra = (item) => item * 2;
const numDobro = numNormal.map( dobra );

filter

Funcionalidade para filtrar os registos, ela faz isso através de um teste lógico ou seja retorna um booleano, este relaciona verdadeiro caso o elemento seja mantido ou falso para não.

Maiores que 5;

let numNormal = [3,6,9];
const numMaior5 = numNormal.filter( (item) => item > 5 );

reduce

Tira uma informação de uma lista, para isso é necessário declarar 2 parâmetros, um para armazenar o resultado parcial do processo e outro com o item a ser processado.
Ao final do bloco de execução declare o valor inicial para variável caso a ela tenha.

Reduzindo a montante;

const numSoma = numNormal.reduce((resParcial, item) => 
resParcial + item, 0);