Funções em JavaScript

JavaScript, evidentemente, também possui suporte a funções.

1. Declaração de Função (Function Declaration)

A forma mais comum de definir uma função em JavaScript é através da declaração de função, de forma próxima com a que fazíamos em C.

Veja o exemplo básico:

function saudar(nome) {
    console.log("Olá, " + nome + "!");
}

saudar("Alice"); // Saída: Olá, Alice!`

Neste exemplo, saudar é uma função que recebe um parâmetro nome e usa esse parâmetro para imprimir uma saudação no console.

Há, entretanto, algumas diferencias importantes: não é necessário declarar tipos para os parâmetros nem o tipo do retorno da função (se houver), já que em JavaScript é feita a inferência dos tipos em tempo de execução.

Vejamos mais um exemplo:

function somar(a, b){
    return a + b;
}

let resultado = somar(10,5);
console.log(resultado); // 15

resultado = somar(2.4, 9.6);
console.log(resultado); // 12

2. Expressão de Função (Function Expression)

Uma expressão de função envolve definir uma função dentro de uma expressão, como um if, por exemplo. Podemos atribuir uma função a uma variável, e essa técnica é particularmente útil para criar funções anônimas.

const quadrado = function(numero) {
    return numero * numero;
}; 

console.log(quadrado(4)); // Saída: 16

A função acima calcula o quadrado de um número. Note que a função não tem nome (é chamada de função anônima) e é atribuída diretamente à variável quadrado. Se desejássemos, poderíamos também atribuir um nome à função:

const quadrado = function funcaocomnome(numero) {
    return numero * numero;
}; 

console.log(quadrado(4)); // Saída: 16

A principal vantagem desta abordagem está na limitação de escopo. A função criada na forma tradicional é acessível em todo o código. Quando criada como função de expressão, não:

if(true){
    const quadrado = function(numero) {
        return numero * numero;
    }; 
    console.log(quadrado(2)); // 4
}

console.log(quadrado(2)); // ReferenceError: quadrado is not defined

3. Arrow Function

As arrow functions são uma adição mais recente ao JavaScript com o ES6. Elas oferecem uma sintaxe mais curta e concisa para escrever funções e são especialmente úteis para funções anônimas. Observe a função a seguir:

function somar(a, b){
    return a + b;
}

Ela pode ser escrita, com arrow function, da seguinte forma:

const somar = (a, b) => a + b;

Se houver mais de uma operação dentro da função, pode-se também inserir chaves:

const somar = (a, b) => { return a + b };

Neste caso, ao adotar chaves, precisa-se explicitar o retorno da função com a palavra reservada return.

console.log(somar(5, 3)); // Saída: 8

Arrow functions são ótimas para operações que podem ser escritas em uma única linha.

4. Funções como Parâmetros de Outras Funções

Em JavaScript, funções podem ser passadas como argumentos para outras funções. Isso é muito utilizado em programação funcional.

function aplicarOperacao(a, b, operacao) {
    return operacao(a, b);
} 

const resultado = aplicarOperacao(10, 20, (x, y) => x + y); console.log(resultado); // Saída: 30

Neste caso, a função aplicarOperacao recebe três parâmetros: dois valores e uma função de operação. A função de operação é uma arrow function que soma os dois valores.

5. IIFE (Immediately Invoked Function Expression)

As IIFE são funções que são executadas imediatamente após sua definição. Elas são úteis para criar um escopo privado e evitar poluição do escopo global.

(function() {
    var temp = "Não sou acessível fora desta função.";
    console.log("Executada imediatamente!");
})();

Esta função é definida e invocada instantaneamente, e a variável temp fica restrita ao escopo da função.

Conclusão

Funções em JavaScript são versáteis e fundamentais para a construção de aplicativos eficientes e organizados. Desde a simples declaração de funções até conceitos mais avançados como arrow functions e IIFE, dominar o uso de funções ajudará significativamente no desenvolvimento de suas habilidades em JavaScript.