Page cover

7.7.2 - Funções

🧠 Funções em Detalhes: Segredos, Cuidados e Curiosidades!

🧠 Funções em Detalhes: Segredos, Cuidados e Curiosidades!

Vamos agora entender ainda mais sobre funções, incluindo situações específicas, dúvidas que todo mundo tem no começo e algumas práticas poderosas que só quem conhece bem as funções usa. Bora? 🚀


🌀 E se não tiver return? Ou se ele estiver sozinho?

🔹 Sem return:

Se sua função não tiver return, ela não devolve valor nenhum. O resultado será undefined.

function digaOi() {
  console.log("Oi!");
}

let resultado = digaOi();
console.log(resultado); // undefined

🔹 Com return; sozinho:

Ela vai sair da função, mas sem devolver nada.

function sairSemNada() {
  return;
}

console.log(sairSemNada()); // undefined

💡 Use return quando quiser devolver algo útil da função. Se quiser só executar algo (como mostrar no console), ele pode ser omitido.


⚡ IIFE – Funções que se executam sozinhas!

IIFE significa Immediately Invoked Function Expression – ou seja, uma função que é criada e executada imediatamente, no mesmo momento.

(function () {
  console.log("Sou uma função que se autoexecuta! 🚀");
})();

💡 Muito usada para isolar variáveis, evitar conflitos e inicializar scripts.


🧭 Quando usar cada tipo de função?

Tipo de Função
Quando usar

function nome()

Quando precisa reutilizar várias vezes ou declarar antes de chamar

const nome = function()

Quando quiser guardar a função em variável, útil para funções anônimas

const nome = () => {}

Quando quiser um código mais limpo ou trabalhar com funções pequenas

⚠️ Lembre-se: funções com function nome() são "hoisted" — ou seja, você pode chamá-las antes mesmo de declará-las. Já as funções em variáveis só funcionam depois da linha onde foram criadas.


📦 Vários parâmetros? Sem problemas!

Você pode passar quantos parâmetros quiser, separados por vírgula:

function mostrarInfos(nome, idade, cidade) {
  console.log(nome + " tem " + idade + " anos e mora em " + cidade + ".");
}

mostrarInfos("Ana", 22, "São Paulo");

💡 Parâmetros extras? Tudo bem!

Se você passar mais argumentos do que parâmetros, os extras são ignorados:

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

console.log(soma(3, 4, 10, 99)); // Só soma 3 + 4

⚠️ Menos parâmetros?

Se faltar algum argumento, ele vira undefined.

function saudacao(nome, sobrenome) {
  console.log("Olá, " + nome + " " + sobrenome);
}

saudacao("Pedro"); // Olá, Pedro undefined

🧷 Parâmetros padrão

Você pode definir valores padrão para os parâmetros, evitando undefined:

function saudacao(nome = "amigo") {
  console.log("Olá, " + nome);
}

saudacao(); // Olá, amigo

🌊 Spread e Rest: o famoso ...

Rest parameters: junta vários argumentos num array

function somarTudo(...numeros) {
  return numeros.reduce((a, b) => a + b, 0);
}

console.log(somarTudo(1, 2, 3, 4)); // 10

🧠 Use ... quando não sabe quantos argumentos vai receber.


🏁 Por que o return é tão importante?

O return entrega um valor de volta para quem chamou a função. Sem ele, a função só faz algo, mas não responde nada.

function dobro(n) {
  return n * 2;
}

let resultado = dobro(5);
console.log(resultado); // 10

Use return para cálculos, verificações, ou qualquer coisa que precise de um valor de saída.


🤯 O que é considerado uma função em JavaScript?

Em JavaScript, funções são primeira classe – ou seja, elas podem ser:

  • Guardadas em variáveis

  • Passadas como argumentos

  • Retornadas de outras funções

  • Guardadas dentro de objetos (métodos)

const executar = () => console.log("Função em variável!");

function recebeFuncao(func) {
  func(); // Chama a função recebida
}

recebeFuncao(executar); // Função em variável!

💡 Observação poderosa: Funções de ordem superior

No JavaScript, as funções são “cidadãs de primeira classe” — ou seja, você pode armazenar, passar e retornar funções como se fossem dados comuns.

👉 Isso abre espaço para um conceito muito útil chamado funções de ordem superior.

🧠 O que é isso?

Uma função de ordem superior (higher-order function) é uma função que:

  • Recebe uma ou mais funções como parâmetro ou

  • Retorna uma função como resultado

🧪 Exemplo 1: recebendo uma função como parâmetro

function executar(acao) {
  acao();
}

executar(() => console.log("Função executada!"));

🔁 Exemplo 2: retornando uma função

function multiplicador(fator) {
  return function(numero) {
    return numero * fator;
  };
}

const vezesDois = multiplicador(2);
console.log(vezesDois(5)); // 10

🧩 Funções de ordem superior são base de muitas ferramentas modernas, como .map(), .filter(), .reduce() e até de frameworks famosos (como React!).

Elas tornam seu código mais modular, legível e poderoso — como montar LEGO com inteligência! 🧱💡


❌ Cuidados importantes e erros curiosos

1. Não usar return onde precisa

function triplo(n) {
  n * 3; // Não retorna nada!
}

console.log(triplo(4)); // undefined 😱

✅ Corrigindo:

function triplo(n) {
  return n * 3;
}

2. Nome igual para variáveis e funções

function soma() {
  return 2 + 2;
}

let soma = 10; // ⚠️ Conflito! Agora soma é um número, não uma função

console.log(soma()); // ❌ Erro!

3. Confundir console.log com return

function saudacao(nome) {
  console.log("Oi, " + nome);
}

let resultado = saudacao("Léo");
console.log(resultado); // undefined

🌟 Resumo do que aprendemos:

Conceito
Explicação

return

Envia valor de volta ao código que chamou a função

IIFE

Função que se executa assim que é criada

...

Recebe vários argumentos como um array (rest)

Parâmetros extras

São ignorados

Parâmetros faltando

Viram undefined

Tipos de função

function, função anônima, arrow function

Funções são objetos

Podem ser guardadas, passadas e manipuladas


🧪 Desafio Final:

Crie uma função chamada calcularNotas que receba qualquer quantidade de notas (usando ...) e calcule a média:

calcularNotas(7, 8, 9, 10); // Deve retornar: 8.5

Depois, use essa função dentro de outra chamada situacaoAluno que retorna:

  • “Aprovado ✅” se a média for ≥ 7

  • “Recuperação 🟡” se for ≥ 5

  • “Reprovado ❌” se for < 5


🎓 Conclusão

Agora você conhece as funções por dentro e por fora. Com essas ferramentas, dá pra escrever códigos mais inteligentes, mais rápidos e mais organizados!

"Funções são como superpoderes: quando você entende como usá-las, pode resolver qualquer missão no mundo da programação!"

Last updated