Funções, arrow functions e closures
JavaScript • Módulo 1: Fundamentos • Codding — material para estudo offline
Aluno: ______________________________ Data: ____ / ____ / ______
Nesta aula, você vai compreender Funções, arrow functions e closures com explicação progressiva, exemplo resolvido, checagens e prática. Nada de apenas copiar: cada etapa prepara a próxima.
Objetivos da aula
- Explicar Funções, arrow functions e closures com suas próprias palavras
- Reconhecer as partes importantes em um exemplo real
- Identificar e corrigir os erros mais frequentes
- Aplicar o conteúdo em uma atividade prática
Pré-requisito: Leia a aula anterior do módulo se algum termo parecer novo. Você pode testar o exemplo antes de continuar. • Duração: 50–75 min
Explicação passo a passo
1. O que é Funções, arrow functions e closures
Função é um bloco com nome que recebe entradas e devolve uma saída. É a ferramenta principal para não repetir código e para testar pedaços isolados do programa.
Checkpoint: O que uma função sem return devolve? — Resposta: undefined / None
2. Como pensar antes de fazer
Parâmetro é o nome na definição; argumento é o valor passado na chamada. Uma boa função tem poucos parâmetros e uma única responsabilidade — se o nome precisa de um 'e' ('salvaEEnvia'), provavelmente são duas funções.
Dica: Não decore a forma. Tente explicar com suas palavras qual problema “Funções, arrow functions e closures” resolve.
3. Exemplo completo, do início ao resultado
Retorno encerra a função na hora. Funções que só imprimem são difíceis de testar; prefira retornar o valor e deixar quem chamou decidir o que fazer com ele.
function calcularTotal(precos, desconto = 0) {
const soma = precos.reduce((acc, p) => acc + p, 0);
return soma - soma * desconto; // retorna, não imprime
}
const total = calcularTotal([10, 20, 30], 0.1);
console.log(total); // 54
// arrow function equivalente
const dobro = (n) => n * 2;
console.log(dobro(21)); // 42| Trecho | O que faz |
|---|
function calcularTotal(precos, desconto = 0) { | Cria uma estrutura reutilizável para organizar comportamento. |
const soma = precos.reduce((acc, p) => acc + p, 0); | Percorre ou transforma uma sequência de valores. |
return soma - soma * desconto; // retorna, não imprime | Produz ou devolve o resultado que permite conferir a execução. |
} | Contribui para a transformação principal mostrada neste exemplo. |
const total = calcularTotal([10, 20, 30], 0.1); | Cria ou atualiza um valor que será usado pelo restante do exemplo. |
console.log(total); // 54 | Produz ou devolve o resultado que permite conferir a execução. |
// arrow function equivalente | Comentário de orientação: documenta a intenção sem executar uma ação. |
const dobro = (n) => n * 2; | Cria ou atualiza um valor que será usado pelo restante do exemplo. |
Dica: desconto tem valor padrão: chamar sem ele funciona. A função devolve o número; quem chama decide imprimir, salvar ou somar.
Checkpoint: Por que preferir retornar em vez de imprimir dentro da função? — Resposta: Porque o valor pode ser testado e reaproveitado por quem chamou
4. Do detalhe para o todo
Escopo: variáveis criadas dentro da função só existem lá dentro. Isso é proteção, não limitação — evita que uma parte do programa estrague a outra sem querer.
5. Erros comuns e como corrigi-los
1. Esquecer o return e receber undefined/None.
2. Função que faz cinco coisas diferentes e ninguém consegue reaproveitar.
3. Depender de variáveis globais em vez de receber parâmetros.
Dica: Quando algo der errado, compare uma diferença por vez com o exemplo. Evite mudar várias partes ao mesmo tempo.
Prática guiada
1. 1. Faça funcionar
Laboratório de Funções, arrow functions e closures: execute o exemplo, identifique entrada, processamento e saída e altere pelo menos um valor para observar como o resultado muda.
function calcularTotal(precos, desconto = 0) {
const soma = precos.reduce((acc, p) => acc + p, 0);
return soma - soma * desconto; // retorna, não imprime
}
const total = calcularTotal([10, 20, 30], 0.1);
console.log(total); // 54
// arrow function equivalente
const dobro = (n) => n * 2;
console.log(dobro(21)); // 42Dica: Volte ao exemplo resolvido e compare a estrutura. Esquecer o return e receber undefined/None.
2. 2. Preveja antes de testar
Sem executar, explique qual resultado o exemplo de Funções, arrow functions e closures deve produzir e qual parte é responsável por ele.
Minha previsão:
A parte responsável pelo resultado:
Como vou conferir:
Dica: Use o modelo mental da aula: entrada, transformação e evidência observável.
3. 3. Encontre e corrija o erro
Use o exemplo de Funções, arrow functions e closures, identifique um risco citado na aula e registre ou implemente a correção.
function calcularTotal(precos, desconto = 0) {
const soma = precos.reduce((acc, p) => acc + p, 0);
return soma - soma * desconto; // retorna, não imprime
}
const total = calcularTotal([10, 20, 30], 0.1);
console.log(total); // 54
// arrow function equivalente
const dobro = (n) => n * 2;
console.log(dobro(21)); // 42Dica: Esquecer o return e receber undefined/None.
4. 4. Aplique em um caso novo
Crie uma variação própria usando Funções, arrow functions e closures. Mude os dados ou o cenário e demonstre que o resultado continua correto.
function calcularTotal(precos, desconto = 0) {
const soma = precos.reduce((acc, p) => acc + p, 0);
return soma - soma * desconto; // retorna, não imprime
}
const total = calcularTotal([10, 20, 30], 0.1);
console.log(total); // 54
// arrow function equivalente
const dobro = (n) => n * 2;
console.log(dobro(21)); // 42Dica: Mantenha a estrutura que já funcionou e altere uma decisão por vez.
Revisão
- Função é um bloco com nome que recebe entradas e devolve uma saída. É a ferramenta principal para não repetir código e para testar pedaços isolados do programa.
- desconto tem valor padrão: chamar sem ele funciona. A função devolve o número; quem chama decide imprimir, salvar ou somar.
- Evite: Esquecer o return e receber undefined/None.
- Evite: Função que faz cinco coisas diferentes e ninguém consegue reaproveitar.
Exemplo comentado
function calcularTotal(precos, desconto = 0) {
const soma = precos.reduce((acc, p) => acc + p, 0);
return soma - soma * desconto; // retorna, não imprime
}
const total = calcularTotal([10, 20, 30], 0.1);
console.log(total); // 54
// arrow function equivalente
const dobro = (n) => n * 2;
console.log(dobro(21)); // 42desconto tem valor padrão: chamar sem ele funciona. A função devolve o número; quem chama decide imprimir, salvar ou somar.
Erros comuns
- Esquecer o return e receber undefined/None.
- Função que faz cinco coisas diferentes e ninguém consegue reaproveitar.
- Depender de variáveis globais em vez de receber parâmetros.
Quiz e gabarito completo
1. O que uma função sem return devolve?
- a) Zero
- b) undefined / None
- c) O último valor calculado
- d) Erro
Gabarito: b) undefined / None — Sem return explícito a função devolve o valor vazio da linguagem.
2. Por que preferir retornar em vez de imprimir dentro da função?
- a) É mais rápido
- b) Porque o valor pode ser testado e reaproveitado por quem chamou
- c) Porque print não existe em produção
- d) Não há diferença
Gabarito: b) Porque o valor pode ser testado e reaproveitado por quem chamou — Retornar separa cálculo de apresentação — base de código testável.
Codding • JavaScript • Funções, arrow functions e closures • Prova final e certificado em codding.lovable.app/cursos/javascript/prova